Shell_7_逻辑结构
一、if 判断
if ... then ... fi
单层
如果 是真的 那么 ...if [ 条件判断式 ];then 当条件判断式成立时,可以进行的命令。 fi # 结束这个判断语句结构
if ... then ... else....fi
多重、复杂条件判断式
如果 是真的 那么 ... 否则 ...if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的指令工作内容; else 当条件判断式不成立时,可以进行的指令工作内容; fi
if ... elif ... elif ... else ... fi
多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
if [ 条件判断式一 ]; then 当条件判断式一成立时,可以进行的指令工作内容; elif [ 条件判断式二 ]; then 当条件判断式二成立时,可以进行的指令工作内容; else 当条件判断式一与二均不成立时,可以进行的指令工作内容; fi
二、 利用 case ..... esac 判断
语法
case $变量名称 in <==关键字为 case ,还有变量前有钱字号
"第一个变量内容") <==每个变量内容建议用双引号括起来,关键字则为小括号 )
程序段
;; <==每个类别结尾使用两个连续的分号来处理!
"第二个变量内容")
程序段
;;
*) <==最后一个变量内容都会用 * 来代表所有其他值
不包含第一个变量内容与第二个变量内容的其他程序运行段
exit 1
;;
esac <==反过来写,结束当前语句结构!
while true
do
read -p ">>:" cho
case ${cho} in
1)
echo "--> 1"
;;
2)
echo "--> 2"
;;
3)
echo "--> 3"
;;
*)
echo "无匹配"
;;
esac
done
三、while ... do ... done (不确定的循环)
while [ condition ] ==>中括号内的状态就是判断式
do ==> do 是循环的开始!
代码段
代码段
done ==> done 是循环的结束
计数
每次循环体执行完,while 都会检查条件是否为真,为真继续循环,否则终止循环。
n=0
while [ "$n" -lt 5 ]
do
let n++
echo "$n"
done
读文件
while read line
do
echo $line
done < /etc/passwd
五、 for do done (固定的循环)
for var in con1 con2 con3 ...
do
程序段
done
六、break 和 continue
break 跳出几层循环
continue 跳出本次循环
Shell_8_set用法
set -u
当脚本中遇到未定义的变量时,默认是忽略。
有时候这并不是开发者想要的。
假如有未定义的变量,应该报错,并且终止脚本继续运行。
set -u
就可以办到
示例
#!/usr/bin/env bash
set -u
echo $a
echo shark
//执行后报错
$ bash set.sh
set.sh: line 13: a: unbound variable
set -x
这个调试脚本是使用,可以看到每个执行的命令,和执行命令后的输出结果。
#!/usr/bin/env bash
set -x
echo shark
- 和
bash -x set.sh
相同的含义。
set -e
脚本中有任何命令的返回值是非零,脚本则停止继续执行。
对管道的命令无效,比如:
foo | echo shark
foo 不是 shell 中的命令,执行会报错,但是其后面有个管道
最终管道后的 echo 命令执行成功了,这种情况下 脚本会继续执行。
set -o pipefail
如果设置,如果管道中的所有命令都成功退出,则返回零。 默认情况下禁用此选项