热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell日积月累第一篇

以下部分习题摘自博文:https:blog.csdn.netyugemengjingarticledetails824697851、编写第一个shell脚本#!bi

以下部分习题摘自博文:https://blog.csdn.net/yugemengjing/article/details/82469785

 

1、编写第一个shell脚本

#!/bin/bash
echo "hello shell!"      //输出字符串

2、if else 分支判断

num1=100
num2=100
if test $num1 -eq $num2
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

3、for 循环

for skill in Adan Bop Ccosd Decso;
do
        echo "the skill is ${skill}."
done

4、执行脚本的时候传递参数到shell脚本内  ($0表示文件名;$1表示接收的第一个参数,依次类推)
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

如果执行shell的时候用了:./test.sh 1 2 3 ,那么结果为:

5、EOF用法

Shell中通常将EOF与 << 结合使用&#xff0c;表示后续的输入作为子命令或子Shell的输入&#xff0c;直到遇到EOF为止&#xff0c;再返回到主调Shell。

当然这个EOF只是个分界符&#xff0c;你可以用任意自定义字符串代替&#xff1b;将内容当成标准输入传递给程序。

如&#xff1a;&#xff08;将EOF作为分界符&#xff0c;输入EOF后传递所有用户输入到文件中&#xff09;

将EOF换成其他字符串&#xff1a;

每次往文件里输入&#xff0c;默认都是直接替换掉文件中内容&#xff1b;

如果要在shell文件里使用EOF&#xff0c;如下&#xff0c;连接本机数据库&#xff0c;查询user表中内容&#xff1a;

6、定时打包日志
#!/bin/bash
# 每天 凌晨2点&#xff0c;使用 tar 命令备份/root/fll/log/下的所有日志文件
# 注意 date 是命令需要使用反引号括起来执行

tar    -zczf    log-&#96;date &#43;%Y%m%d&#96;.tar.gz    /root/fll/log/
 
# crontab ‐e    #编写计划任务,执行备份脚本&#xff0c;具体使用参考&#xff1a;https://mp.csdn.net/postedit/98209544
*/3    *   *    *    *    cd /root/fll/ && ./test.sh

7、监控内存和磁盘容量&#xff0c;小于给定值时报警

#!/bin/bash
# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
 
# 提取根分区剩余空间
disk_size&#61;$(df / | awk &#39;/\//{print $4}&#39;)
 
# 提取内存剩余空间
mem_size&#61;$(free | awk &#39;/Mem/{print $4}&#39;)
while :
do

# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
then
    mail  ‐s  "Warning"  root  <     Insufficient resources,资源不足
EOF
fi
done

8、猜数字
 #!/bin/bash
# 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
# 猜小了或猜大了,直至用户猜对脚本结束。
 
# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
# 使用取余算法将随机数变为 1‐100 的随机数

num&#61;$[RANDOM%100&#43;1]
echo "$num"
 
# 使用 read 提示用户猜数字
# 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于), ‐lt(小于),‐le(小于等于)

while  :            #如果有表达式&#xff0c;则不需要加&#xff1a;
do

    read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
    if [ $cai -eq $num ]        #“[、]”旁边要有空格
    then
           echo "恭喜,猜对了"
           exit
   elif [ $cai -gt $num ]
   then
               echo "Oops,猜大了"
   else
               echo "Oops,猜小了"
   fi

done

9、创建一个新用户&#xff0c;输入用户名若用户名不输入则提示退出&#xff1b;若输入&#xff0c;则继续输入密码&#xff0c;默认不输入为123456。

#!/bin/bash
# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户
# 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默 认的 123456 作为默认密码。
 
read -p "请输入用户名: " user
#使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
#没有输入用户名脚本退出后,使用$?查看的返回码为 2

if [ -z $user ];then
       echo "您需输入账户名"
     exit 2
fi
#使用 stty ‐echo 关闭 shell 的回显功能
#使用 stty  echo 打开 shell 的回显功能

stty -echo
#用户已存在则提示update。。

egrep "$user" /etc/passwd > /dev/null
if [ $? -eq 0 ];then
        read -p "请更新密码: " pass
else
         read -p "请输入密码: " pass
fi
stty echo
pass&#61;${pass:‐123456}
useradd "$user"
echo "$pass" | passwd ‐‐stdin "$user"


10、Linux里的switch case

echo "please input your choice from the list."
#echo -e 激活转义字符 这里换行
echo -e "1.apple\n2.peach\n3.orange"
read choice
case $choice in
    1)echo "apple pie."
    ;;
    2)echo "i like it so much."
    ;;
    3|4|5)echo "orange juice."    #多个选择用|分割
    ;;
    *)echo "others."      
    ;;
esas

11、&#xff08;for 循环使用&#xff09;查看一个网段内1~254的主机有多少是开机状态


#!/bin/bash
# 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
# 状态(for 版本)
for i in {1..254}  
do
    # 每隔0.3秒ping一次&#xff0c;一共ping2次&#xff0c;并以1秒为单位设置ping的超时时间
       ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
    if  [ $? -eq 0 ];then
           echo "192.168.4.$i is up"
       else
           echo  "192.168.4.$i is down"
       fi

done

12、上面这个例子&#xff0c;就是要等待前一台ping完后才能继续&#xff0c;如此下去很耗时&#xff0c;那么可以考虑多进程方式。
#!/bin/bash
# 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
# 状态(多进程版)
#定义一个函数,ping 某一台主机,并检测主机的存活状态

myping(){
ping ‐c 2 ‐i 0.3 ‐W 1 $1  &>/dev/null
if  [ $? -eq 0 ];then
    echo "$1 is up"
else
    echo "$1 is down"
fi
}
for i in {1..254}
do
       myping 192.168.4.$i &   # 放入后台执行
done


 

 


推荐阅读
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 这是一个愚蠢的问题,但我只是对此感到好奇.假设我在Pythonshell,我有一些我查询的数据库对象.我做:db.query(的queryString)该查询在0xffdf842c ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 很多时候在注册一些比较重要的帐号,或者使用一些比较重要的接口的时候,需要使用到随机字符串,为了方便,我们设计这个脚本需要注意 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • 本文介绍了一个编程问题,要求求解一个给定n阶方阵的鞍点个数。通过输入格式的描述,可以了解到输入的是一个n阶方阵,每个元素都是整数。通过输出格式的描述,可以了解到输出的是鞍点的个数。通过题目集全集传送门,可以了解到提供了两个函数is_line_max和is_rank_min,用于判断一个元素是否为鞍点。本文还提供了三个样例,分别展示了不同情况下的输入和输出。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList优于LinkedList,因为Ar ... [详细]
  • 假设我有两个数组A和B,其中A和B都是mxn.我现在的目标是,对于A和B的每一行,找到我应该在B的相应行中插入A的第i行元素的位置.也就是说,我希望将np.digitize或np. ... [详细]
author-avatar
x-诗儿_683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有