shell条件测试和循环语句

目录

条件判断

条件测试命令

test格式

[ 条件表达式 ]

[[ 条件表达式 ]]

逻辑测试命令

 条件判断语句

if语句

单分支

双分支

多分支

case语句

循环语句

for语句

双层for循环: 

while

until

循环控制语句

continue:

break:

exit

生成随机数

练习


条件判断

$?:条件判断,失败或者成功,真或者假 true false

shell脚本 :0 为真,true,执行成功。所有非0都是false 假,执行失败

条件测试命令

test格式

test 操作符 条件表达式
-e exist 测试目录或文件是否存在
-d 测试是否为目录
-f 测试是否为文件
-r 测试当前用户是否有读权限
-w 测试当前用户是否有写权限
-x 测试当前用户是否有执行权限
-z 判断括号内容是否为空

        test也可以进行数值和字符串比较

字符串比较,比较的内容是否一致

        常见的比较符:(以下只能用于整数比较)

- -eq 等于 ==

- -ne 不等于 ! =

- -gt 大于 >

- -lt 小于 <

- -le 小于等于 < =

- -ge 大于等于 > =

[ 条件表达式 ]

        和test格式类似,但存在歧义和问题

[[ 条件表达式 ]]

        双中括号的写法比]的功能更加强大。可以避免歧义的出现。而且双中括号可以支持正则表达式。双括号只支持符号连接,不支持字母连接语句。

逻辑测试命令

  • -a或者&& 逻辑与 :前后体检都要成立

  • -0或者|| 逻辑或 :前后满足一个即可

  • ! 取反

 条件判断语句

if语句

单分支

if [ 条件表达式 ] 
  then
    命令序列
fi

双分支

if [ 条件表达式 ] 
  then
    命令序列
  else
    命令序列
fi
  • 练习

多分支

if [ 条件表达式 ]
  then
    命令序列
  elif [ 条件表达式 ]
    then
      命令序列
  else
    命令序列
fi

case语句

case 变量 in
    模式1)
        命令序列
        ;;
    模式2)
        命令序列
        ;;
    *)
        命令序列
        ;;
esac

1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰, 如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。 男生进男生组,女生进女生组,如果输入错误请提示错误(整数判断,小数判断。9.72 3.21 )

3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录 tar -zxvf

tar -jxvf

4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。

5.根据上一题再判断输入的内容是奇数还是偶数。

6.用if 语句判断主机是否存活.保存到/opt/hosts.txt ping -c 5 不显示ping的过程

7.用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务, 要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}”。 stop start status restart

循环语句

  • 循环

  • 在Shell脚本中,有三种主要的循环语句:for、while和until。这些循环语句在满足一定的条件情况下,允许重复执行命令或一组命令,以实现自动化任务。

  • 循环包括:循环体以及循环条件。当循环条件满足,循环体将一直被执行,直到循环条件不满足为止。

  • 循环是─种流程控制的结构。

  • 遍历

  • 遍历是指对—组数据结构中的每个元素进行一次访问的过程。

  • 数组列表等等,会遍历其中的元素,对这些元素进行指定的操作。

遍历是对数据操作的过程,循环和遍历是结合使用的.

  • 循环的好处

  • 重复的执行代码,可以在程序中重复执行一段代码,避免重新编写代码。减少程序的代码量。提高程序的可读性和可维护性

  • 提高整个程序的运行的效率

  • 提高代码的复用率

for语句

for循环用于在指定范围内或遍历列表中的元素执行一组命令。它通常用于已知循环次数或遍历已知元素的情况。

for 变量 in 取值范围
do
    命令列表
done
  • for 1

for (( 表达式1; 表达式2; 表达式3;))
do
  命令列表
done
  • for 2

双层for循环: 

        外循环控制整个循环的次数,而且外循环执行的是行,内循环执行的列

while

for循环和while在绝大多数情况下可以通用。

while在循环条件满足的情况才会执行,一旦条件不满足立刻停止

while [ 判断条件 ]
do
   命令序列
done
  • 运用

  • 不知道循环次数的场景

  • 需要主动结束循环的或者达到条件才会终止循环。

until

until判断条件成立时,终止循环,只有条件不成立才会进行循环。

until [ 判断条件 ]
do
    命令序列
done

循环控制语句

continue:

  • 跳出循环,表示满足条件时跳出循环,但是不影响后续循环的继续执行。

  • 作用:在循环内部跳过本次循环并继续下一次满足条件的循环

break:

跳出循环,满足条件直接跳出循环,后续的循环条件也不再执行。

  • 练习

默认的数字都是1,有几层数字为几

exit

表示整个进程全部结束。

默认数字0

生成随机数

练习

  • 总练习1

    淘宝购物:—家店铺,五种商品进行选择,衣服500,裤子400,鞋子350,帽子150,袜子50,吴总逛到了这家店,每次选购完之后或者进店什么都不买都提示用户,你还要接着买吗?如果不再继续购物,提示用户的消费金额,吴总,结账才能走了。

    每种商品赋值

    选择商品后金额累加,

    循环:判断是否继续购买,继续购买提示,不继续购买提示金额。

  • 总练习2

    1.打印出/etc/目录下所有的文件

    2.利用for循环将多个文件的内容合并为一个文件:

    3.循环的ping测试整个网段的连通性(读取用户输入的网段,测试后,通的要保留到、opt/hosts.txt 而且提示用户该ip可以通,不通的也显示)

    4.打印梯形

    5.用户输入密码,脚本来判断密码是否正确,正确的是123456,连续输入3次报警

    密码是固定的123456,用户自定义输入,3次则提示超过三次,不能再输了,循环终止。

  • 总练习3

    1、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

    2、用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在, 输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码; 若该用户不存在,提示用户输入密码,建立用户并设立其密码

    3、实现可变菱形。

    4、查找/opt/test中的所有文件,并将它们复制/opt/test1中

    5、查找opt目录下的所有.txt位结尾的文件,如果存在,打印文件内容。然后把文件内容保存到/opt/new.txt中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值