编程语句

流程控制
过程式编程语言:
循环执行

run-parts  批量运行目录里所有脚本


选择执行
if语句,if语句可嵌套:
1.单分支
if 判断条件;then
         条件为真的分支代码
fi

2.双分支
if 判断条件;then
         条件为真的分支代码
else
         条件为假的分支代码
fi

3.多分支
if 判断条件1;then
        条件为真的分支代码
elif 判断条件2;then
        条件为真的分支代码
elif 判断条件3;then
        条件为真的分支代码
else
        以上条件都为假的分支代码
fi
逐条进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
 


case语句:
case 变量引用 in
PAT1)                             case支持glob风格的通配符:
     分支1                             *:任意长度任意字符
     ;;                                ?:任意单个字符
PAT2)                                  []:指定范围内的任意单个字符
     分支2                              a|b:a或b
     ;;
...
*)
     默认分支
esac


编程语句_第1张图片

for循环:
第一种
for 变量名 in 列表;do
    循环体
done
依次将列表中的元素赋值给“变量名”;每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束


第二种
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
do
    循环体
done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
 


while循环:
while CONDITION;do
    循环体
done

CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件“true”,
则执行一次循环;直到条件测试状态为“false”终止循环
因此:CONDITION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false

while循环特殊用法:
while read line;do
    循环体
done < /data/FILE
依次读取/data/FILE文件中的每一行,且将行赋值给变量line


until循环:
until CONDITION;do
    循环体
done

进入条件:CONDITION为false
退出条件:CONDITION为true


循环控制:
continue和break命令
用于循环体中
continue [#]:提前结束第#层的本轮循环,而直接进入下一轮判断;最内层为第一层
while CONITION1;do
    CMD1
    ...
    if CONITION2;then
        continue
    fi
    CMDn
    ...
done

break [#]:提前结束第#层循环,最内层为第1层
while CONITION1;do
    CMD1
    ...
    if CONITION2;then
        break
    fi
    CMDn
    ...
done


shift [#]
用于将参量列表list左移指定次数,缺省为左移一次
参量列表list一旦移动,最左端的那个参数就从列表中删除。while循环遍历位置参量列表时,常用到shift
例子:
until [-z "$1"];do
    useradd "$1"
    echo "user $1 is creat"
    shift
done
echo "finsh"


创建死循环
while true;do
    循环体
done

unti false;do
    循环体
done


select循环菜单
select 变量名 in list
    do
        循环体命令
done
select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准输出上,并显示PS3提示符,等待用户输入。
用户输入菜单列表的某个数字,执行相应的命令
用户输入被保存在内置变量REPLY中
select是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c退出循环
select经常和case联合使用
与for循环类似,可以省略in list,此时使用位置参量


信号捕捉trap:
trap '触发指令' 信号  
    自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
trap '' 信号
    忽略信号操作
trap '-' 信号
    恢复原信号的操作
trap -p 
    列出自定义信号操作
trap -l   =kill -l
    查看信号列表

15信号可以捕抓,9信号不能捕抓


例子:
1、判断年龄
read -p "Plesae input your age: " AGE
[[ "$AGE" =~ ^[0-9]+$ ]] || { echo Age is no digit; exit; }
if [ "$AGE" -lt 18 ] ;then
        echo "good study"
elif [ "$AGE" -ge 18 -a "$AGE" -lt 60 ] ;then
        echo "good work"
elif [ "$AGE" -ge 60 -a "$AGE" -lt 150 ] ;then
        echo "good luck"

你可能感兴趣的:(马哥随堂笔记,bash)