【Linux/shell中if用法小记_以及for-while等循环写法】

 

 

 

 

 

[标签]: 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

  

  

  

总结:善于总结不仅有趣,而且 有用.

 

 

 

百度一下    谷歌翻译

 

 

 

 

 

 

【书君方案】 简洁、完整、漂亮、记忆深刻

 

 

 

 

 

 

©2022 BLUBN.HonL   京ICP备15053931号   书君   bookfooked.com V1.1