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

简介: 原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6675350.html 微信:intsmaze   if 语法格式 if condition then statements [elif condition ...

 

原文和作者一起讨论: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

 

作者: intsmaze(刘洋)
老铁,你的--->推荐,--->关注,--->评论--->是我继续写作的动力。
微信公众号号:Apache技术研究院
由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell
Shell编程(下)
Shell编程(下)
107 1
|
2月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
46 1
|
2月前
|
Shell Linux 开发工具
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
78 12
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
48 12
|
3月前
|
Shell Linux
Shell 编程 编写hello word
Shell 编写hello word
55 5