linux shell循环:for、while、until用法详解

2019-09-23 08:51:54刘景俊

true
[root@centos6mini 3.19]# [ -z ]&& echo true #空为真
true
[root@centos6mini 3.19]# [ -z "" ]&&echo true #空为真
true
[root@centos6mini 3.19]# [ -z "1" ] && echo true "#非空为假
[root@centos6mini 3.19]# [ -z " " ] && echo true #非空为假

扫描/etc/passwd文件每一行,如发现GECOS字段为空,则填充用户名和单位电话为62985600,并提示该用户的GECOS信息修改成功。

#!/bin/bash
cat /etc/passwd |while read userline;do #用管道实现给循环while赋值
    if [ -n "$(echo $userline |cut -d: -f5)" ];then  #-n "1" 非空为真
        continue   #为真时啥都不做
    else
        username=$(echo $userline|cut -d: -f1)
        usermod -c $username-62985600 $username
        echo $username's gecos already changed!
    fi
done

特殊用法

双小括号方法,即((…))格式,也可以用于算术运算

双小括号方法也可以使bash Shell实现C语言风格的变量操作

I=10

((I++))

for循环的特殊格式:

for ((控制变量初始化;条件判断表达式;控制变量的修正表达 式))

do

循环体

done

控制变量初始化:仅在运行到循环代码段时执行一次

控制变量的修正表达式:每轮循环结束会先进行控制变量修 正运算,而后再做条件判断

练习:计算从1加到100的和。

#!/bin/bash
sum=0
for ((i=1;i<=100;i++));do
    let sum+=i
done
echo sum=$sum
unset sum i
 
sum=0
i=1
while [ $i -le 100 ];do
    let sum+=i
    let i++
done
echo sum=$sum

select循环与菜单
select variable in list

do

循环体命令

done

select 循环主要用于创建菜单,按数字顺序排列的 菜单项将显示在标准错误上,并显示 PS3 提示符, 等待用户输入

PS3="Please choose your menu: "

用户输入菜单列表中的某个数字,执行相应的命令

用户输入被保存在内置变量 REPLY 中

[root@centos6mini 3.19]# ./linshi   
1) huangmenji
2) huimian
3) hulatang
4) roujiamo
Please choose your menu: 1
The price is $15
Please choose your menu: 2
The price is $10
Please choose your menu: 3
The price is $8
Please choose your menu: 4
The price is $6
Please choose your menu: 5
get out

[root@centos6mini 3.19]# cat ./linshi  
#!/bin/bash

select menu in huangmenji huimian hulatang roujiamo;do 
    case $REPLY in
        1) echo "The price is $15";;
        2) echo "The price is $10";;
        3) echo "The price is $8";;
        4) echo "The price is $6";;
        *) echo "get out";break;;
    esac
done

信号捕捉trap

trap '触发指令' 信号

自定义进程收到系统发出的指定信号后,将执行触发指令 ,而不会执行原操作

trap '' 信号 忽略信号的操作