shell脚本if和case语句及循环的用法

一,if语句的用法

1. 单分支语句结构
第一种语法如下

 if   <条件表达式>
  then
   指令
   fi

第二种用法

if <条件表达式>;  then
指令
fi

2.文件表达式

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

3.整数变量表达式

-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

字符串变量表达式

If  [ $a = $b ]                 如果string1等于string2,则为真
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2,则为真       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空,则为真
if  [ $sting ]                  如果string 非空,返回0 (和-n类似) 


    逻辑非 !                   条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ]               如果不存在目录$num


    逻辑与 –a                   条件表达式的并列
if [ 表达式1  –a  表达式2 ]


    逻辑或 -o                   条件表达式的或
if [ 表达式1  –o 表达式2 ]

4.重定向符
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
在这里插入图片描述
举例:

[root@centos01 ~]# echo "aaa"  <!--数据输出到显示器上显示-->
aaa
[root@centos01 ~]# echo "aaa" > 1.txt    <!--将数据输出到文件中-->
[root@centos01 ~]# cat 1.txt      <!--查看文件中数据-->
aaa
[root@centos01 ~]# echo "bbb" >> 1.txt      <!--将数据追加输出到1.txt文件中-->
[root@centos01 ~]# cat 1.txt         <!--查看文件-->
aaa
bbb

举例:
使用passwd命令为用户设置密码时,每次都必须根据提示输入两次密码字串,非常繁琐,若改用重定向输入将可以省略交互式的过程,而自动完成密码设置。

[root@centos01 ~]# useradd bob  <!--创建bob用户-->
[root@centos01 ~]# vim password.txt     <!--添加初始密码串-->
pwd@123                    <!--密码为pwd@123-->
[root@centos01 ~]# passwd --stdin bob < password.txt      <!--从password.txt文件中取密码-->
更改用户 bob 的密码 。
passwd:所有的身份验证令牌已经成功更新。

case语句
case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构。
case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。

case 语句的运用
举例
判断一个数字是否则在1,2,3之中

#!/bin/bash
read -p "请输入一个数字:" n
case "$n" in
    1)
        echo "变量是1"
        ;;
    2)
        echo "变量是2"
        ;;
    3)
        echo "变量是3"
        ;;
    *)
        echo "pls input a number between 1 and 3"
        exit;
esac

多级if语句改写

#!/bin/bash
read -p "请输入一个数字:" n
if [ $n -eq 1 ]; then
    echo "$n是变量1"
elif [ $n -eq 2 ]; then
    echo "$n是变量2"
elif [ $n -eq 3 ]; then
    echo "$n是变量3"
else
    echo "pls input a number between 1 and 3"
fi

判断 分数等级

#!/bin/bash

read -p "pls input score to test level:" score

if [ $score -ge 90 ]; then
    echo "优秀"
elif [ $score -ge 80 ]; then
    echo "良好"
elif [ $score -ge 70 ]; then
    echo "中等"
elif [ $score -ge 60 ]; then
    echo "及格"
else
    echo "不及格"
fi

for循环
1.结构使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,“取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录)。
2.格式

for 变量名 in 取值列表
do
        命令序列
done
for ((expr1;expr2;expr3)); do
                
   循环体
done

举例
1、计算1-10的和sum;
第一种方式

#!/bin/bash
declare -i sum=0
for i in `seq 1 10`
do
    let sum=$sum+$i
done
echo $sum

第二种方式

#!/bin/bash
declare -i sum=0
for ((i=0;i<=10;i++))
do
    sum+=$i
done
echo $sum

计算100以内所有能被3整除的正整数的和;

 #!/bin/bash
declare -i sum=0
for i in `seq 1 100`
do
    if [ $[$i%3] -eq 0 ]
    then
        sum+=$i
    fi
done
echo $sum
~

while循环
while循环适用于循环次数未知的场景,要有退出条件。

 进入循环:条件满足

    退出循环:条件不满足

格式

  while condition  ; do 

         循环体

     done

1、计算100以内所有正整数的和sum;

#!/bin/bash
declare  -i   sum=0
declare -i   I=0
which  [ $I -lt   100 ];do
            let  I++
            let  sum =$sum+$I
     done
     echo $sum      
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值