Linux之shell编程条件判断-if,while,for,case

 

原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6675350.html

微信:intsmaze

 

if 语法格式

if condition 
then  statements 
[elif condition 
    then statements] 
[else 
    statements ] 
fi

示例

vi if.sh

复制代码
#!/bin/bash
if [ $1 = root ]
then
   echo "hello $2 ,  welcome !"
elif [ $1 = intsmaze ]
then
   echo "hello ${2},  welcome !"
else
   echo "SB${2}, get out here !"
fi
复制代码

sh if.sh intsmaze nihao 通过执行脚本时,在脚本命令的后面传入参数。

判断条件

1:条件判断基本语法

[ condition ]  (注意condition前后要有空格)

#非空返回true,可使用$?验证(0为true,1为false)

#空返回false,里面条件为空格也是叫空。

复制代码
[hadoop@centos-Reall-131 shtest]$ if [ 1 ]; then echo ok ;else echo bad; fi; 
ok
[hadoop@centos-Reall-131 shtest]$ if [ 0 ]; then echo ok ;else echo bad; fi;  
ok
[hadoop@centos-Reall-131 shtest]$ if [ a ]; then echo ok ;else echo bad; fi;  
ok
[hadoop@centos-Reall-131 shtest]$ if [  ]; then echo ok ;else echo bad; fi;    
bad
[hadoop@centos-Reall-131 shtest]$ if [   ]; then echo ok ;else echo bad; fi; 
bad
复制代码

注意[  ]内部的=周边的空格,有区别:

[hadoop@centos-Reall-131 shtest]$ if [ a=b ]; then echo ok ;else echo bad; fi;  
ok
[hadoop@centos-Reall-131 shtest]$ if [ a = b ]; then echo ok ;else echo bad; fi; 
bad

#a=b它识别为一个整体的字符串,所以条件判断为true

短路(理解为三元运算符)

[ condition ] && echo OK || echo notok

条件满足,执行&&后面的语句;条件不满足,执行|| 后面的语句

2:条件判断组合

注:[] 与[[ ]] 的区别:[[ ]] 中逻辑组合可以使用 &&(与) ,||(或) ,而[] 里面逻辑组合可以用 -a(与) ,-o(或)。

复制代码
[hadoop@centos-Reall-131 shtest]$ if [ a = b && b = c ]; then echo ok;else echo bad;fi  
-bash: [: missing `]'
bad
[hadoop@centos-Reall-131 shtest]$  if [ a = b -a b = b ]; then echo ok;else echo bad;fi  
bad
[hadoop@centos-Reall-131 shtest]$ if [ a = b -o b = b ]; then echo ok;else echo bad;fi  
ok
[hadoop@centos-Reall-131 shtest]$ if [[ a = b && b = b ]]; then echo ok;else echo bad;fi  
bad
[hadoop@centos-Reall-131 shtest]$ if [[ a = b || b = b ]]; then echo ok;else echo bad;fi  
ok
复制代码

3:常用判断运算符

字符串比较:= ,!= ,-z 字符串长度是为0返回true-n 字符串长度是不为0返回true这里不包括空格的情况。

[hadoop@centos-Reall-131 shtest]$ if [ 'aa' = 'bb' ]; then echo ok; else echo bad;fi #引号可有可无,当然在进行比较时最好使用引号更好表示。
bad
[hadoop@centos-Reall-131 shtest]$ if [ -n "aa" ]; then echo ok; else echo bad;fi
ok
[hadoop@centos-Reall-131 shtest]$ if [ -z "" ]; then echo ok; else echo bad;fi
ok

整数比较:

-lt 小于

-le 小于等于

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

文件判断:

-d 是否为目录

-f 是否为文件

-e 是否存在

[hadoop@centos-Reall-131 shtest]$ if [ -d /home/hadoop ]; then echo ok; else echo bad;fi    
ok
[hadoop@centos-Reall-131 shtest]$ if [ -f /home/hadoop/ ]; then echo ok; else echo bad;fi      
bad
[hadoop@centos-Reall-131 shtest]$ if [ -e /home/hadoop/ ]; then echo ok; else echo bad;fi      
ok

路径必须找得到,如果没有找到指定路径的文件,则判断条件就为false。

while语法

i=1
while ((i<=3))
do
  echo $i
  let i++ #(等价((i++)))
done

case语法

复制代码
case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)#其他条件都不匹配下,执行该
echo "Usage: {start|stop}"
esac
复制代码

for语法

1、方式一
复制代码
N=1
for
N in 1 2 3 do echo $N done 或 N=1 for N in 1 2 3; do echo $N; done 或 N=1 for N in {1..3}; do echo $N; done #(代表1到3之间的数字)
复制代码
2、方式二
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times";done

 

posted @   暴躁IT老绵羊  阅读(3543)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示