shell循环语句

if循环

  • if的基本语法:

if的基本语法:
if [ command ];then
   符合该条件执行的语句
elif [ command ];then
   符合该条件执行的语句
else
   符合该条件执行的语句
fi
  • 举例

    #!/bin/bash
    user=kiosk
    if grep $user /etc/passwd;then
        echo "Hello $user"
    fi
     
    if date;then
        echo "Hello date"
    fi
    #!/bin/bash
    user=student
    if grep $user /etc/passwd;then
        echo "The files for user $user are:"
        ls -a /home/$user
    else
        echo "$user not exist!"
    fi
#!/bin/bash
if [ "$1" -eq "student" ];then
    echo "Welcome $1"
elif [ "$1" -eq "westos" ];then
    echo "Welcome $1"
elif [ "$1" -eq "kiosk" ];then
    echo "Welcome $1"
elif [ "$1" -eq "linux" ];then
    echo "Welcome $1"
else
    echo "You are not allowed!"
fi
  • for循环

  • 语法1

for 变量 in 值1 值2 值3…
do
程序
done
    #!/bin/bash
    for i in `seq 1 2 10`
    do
        echo $i
    done
#!/bin/bash 打印时间
for time in morning noon afternoon evening
do
echo "This time is $time!"
done
  • 语法二

 for ((初始值;循环控制条件;变量变化))
do
程序
done

在语法二中需要注意以下几点:

    初始值:在循环开始时,需要给某个变量赋予初始值,如 i=1。
    循环控制条件:用于指定变量循环的次数,如 i<=100,则只要 i 的值小于等于 100,循环就会继续。
    变量变化:每次循环之后,变量该如何变化,如 i=i+1,代表每次循环之后,变量的值都加 1。


语法二和其他语言中的 for 循环类似,也就是事先决定循环次数的固定循环。先举一个简单的例子。

    #!/bin/bash
    for ((i=1;i<=5;i++))
    do
        echo "$i"
    done
#!/bin/bash
#从 1 加到100
s=0
for(( i=1;i<=100;i=i+1))
#定义循环100次
do
    ((s+=i))
#每次循环给变量s赋值
done
echo "The sum of 1+2+..+100 is : $s"
#输出从1加到100的和
#!/bin/bash
#for((a=1;a<10;a++))
#for a in `seq 10`
for a in {1..10}
do
        ping -c1 -w2 172.25.254.$a  &> /dev/null && echo 172.25.254.$a is up || echo 172.25.254.$a  is down
done
#!/bin/bash
for i in $(seq 9)
do
    for j in $(seq $i)
        do
        echo -ne "$i*$j=$[i*j]\t"
        done
    echo -e "\n"
done
#!/bin/bash
read -p "输入分和秒开始倒计时:" a b
 
 
for((c=(a*60)+b;c>0;c--))
do
    m=$[c/60]
    s=$[c%60]
    echo -n "TIME is $m:$s"
    echo -ne " \r"
    sleep 1
done

while循环

  • 语法

while condition
do
    statements
done

condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),dodone都是 Shell 中的关键字。

while 循环的执行流程为:

  • 先对 condition 进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。
  • 每一次执行到 done 的时候都会重新判断 condition 是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。
  • 如果一开始 condition 就不成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。


注意,在 while 循环体中必须有相应的语句使得 condition 越来越趋近于“不成立”,只有这样才能最终退出循环,否则 while 就成了死循环,会一直执行下去,永无休止。

  • 举例

#!/bin/bash
PREFIX="westos"
i=1
while [ $i -le 10 ]
do
    useradd -r  ${PREFIX}$i &> /dev/null
    echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
    ((i++))
done
    #!/bin/bash
    i=1
    sum=0
    while ((i <= 100))
    do
        ((sum += i))
        ((i++))
    done
    echo "The sum is: $sum"
    #!/bin/bash
    sum=0
    echo "请输入您要计算的数字,按 Ctrl+D 组合键结束读取"
    while read n
    do
        ((sum += n))
    done
    echo "The sum is: $sum"
  • case语句

  • 语法

case 值 in
模式1)
    command1
    command2
    command3
;;
模式2)
    command1
    command2
    command3
;;
*)
    command1
    command2
    command3
;;
esac

​ case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。

​ 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

  • 举例

echo 'Input a number:'
read Num
case $Num in
    1)  echo 'You select 1'
    ;;
    2)  echo 'You select 2'
    ;;
    3)  echo 'You select 3'
    ;;
    4|5)  echo 'You select 4 or 5'
    ;;
    *)  echo 'default'
    ;;
esac
#!/bin/bash
while true
do
    echo -e "
    \033[31m A 显示主机IP \033[0m
    \033[32m B 显示磁盘剩余空间 \033[0m
    \033[33m C 显示系统运行时间 \033[0m
    \033[34m Q 退出系统 \033[0m
"
read -p "请输入你的选择:" char
 
case $char in
 
a|A)
   ifconfig br0 | grep "inet " | awk '{print $2}'
    ;;
 
b|B)
    df -h | awk 'NR==2{print "剩余空间大小为:"$4}'
    ;;
 
c|C)
    uptime |awk '{print $3}' | awk -F, '{print $1}' | awk -F: '{print "系统已经运行了"$1"小时"$2"分钟"}'
    ;;
 
q|Q)
    exit 0
    ;;
 
esac
done

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值