[标签]: if用法 shell脚本 if判断if循环 for-do-done循环 while-do-done循环
问题详情的描述或方案目标的预期:
if、while、case、for等循环及判断整理来一波[更新中...]
【解决方案】
一. [if基本格式的三种写法]
if [ ]
then
fi
if [ ];then
fi
if kubectl --context ${cluster} -n ${namespace} get deploy ${app_name}
then
fi
====================== 分割线 ======================
二. [if单分支、多分支写法]
单分支
if [ 条件表达式 ]; then
指令
fi
双分支
if [ 条件表达式 ]; then
指令一
else
指令二
fi
多分支
ARG_ONE=9
if [ -e "/tmp/test.log" ]; then
echo "文件test.log存在--显示此行表示判断命中,将不再进行后面的判断,就此结束if"
elif [ -s test.log ]; then
echo "文本test.log不为空--显示此行表示之前的判断都不为真,本次判断为真,结束"
elif [ -z $ARG_ONE ]; then
echo "变量ARG_ONE为空--示此行表示之前的判断都不为真,本次判断为真,结束"
else
echo "啥也不是"
fi
====================== 分割线 ======================
三. [判断中的常用参数]
-eq 两数相等为真
-ne 两数不等为真
-lt 左参小于右参为真
-le 左参小于等于右参为真
-gt 左参大于右参为真
-ge 左参大于等于右参为真
-e 对象存在为真,可判断目录或者文本,包括/dev/null这种非正规文件
-f 文件存在为真(正规文件)
-d 检查目录是否存在
-r file 可读为真
-w file 可写为真
-x file 可执行为真
-s 文件内容是否不为空
-a 与
-o 或
! 非
if [ $score -ge 0 ] && [ $score -lt 60 ];then --左侧判断为真后继续判断右侧(满足大于等于0后继续判断是否小于60)
if [ $score -ge 60 ] || [ $score -ge 50 ];then --左侧判断为假时才执行右侧判断(若不大于等于60看看是否大等于50)
if [ $score -ge 0 -a $score -lt 6000 ];then --直接同时判断变量score是否满足大于等于0并且小于6000
====================== 分割线 ======================
四. [常用判断在shell中的经典用法]
|| 左边为假,右边执行(常用) && 左边为真,右边执行
[ -e "/root/tools/" ] || mkdir -p "/root/tools/" --判断目录是否存在,不存在则创建
[ -e "/tmp/test.log" ] || touch '/tmp/test.log' --断文本是否存在,不存在则创建
[ -e "/tmp/aa.txt" ] && touch '/tmp/bb.txt' --aa.txt存在则为真,执行创建bb.txt
· shell中浮点数(小数)的大小比较 if [ `echo "$a < "$b"|bc` -eq 1 ]
====================== 分割线 ======================
五. [for循环]
第一种写法:先定义变量,再引用变量
LIST="a b c"
for i in $LIST
第二种写法:直接写上各个变量
for i in a b c
第三种写法:直接写上变量 + 已存在的变量名
for i in /etc/locale.conf "$HOME/.i18n"
for++精简写法:
for (( i=1;i<$LENGTH_CONTENT;i++ ));do
====================== 分割线 ======================
六. [while循环]
1) while的i++计数
i=1
sum=0
while [ $i -le 100 ]
do
let sum=sum+$i
let i++
done
echo $sum
2) while文本读行
cat a.txt | while read line;
do
echo $line
done
3) 多参数引用并统计参数个数
until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done
执行以上程序 myscript.sh:
./myscript.sh 1 2 3 4
结果显示如下:
第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1
总结:善于总结不仅有趣,而且 有用.