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技术研究院
由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章
|
2月前
|
安全 算法 Ubuntu
Linux(openssl)环境:编程控制让证书自签的技巧。
总结:在Linux环境中,OpenSSL是一个非常实用的工具,可以帮助我们轻松地生成自签名证书。通过上述三个简单步骤,即可为内部网络、测试环境或开发环境创建自签名证书。但在公共访问场景下,建议购买经过权威认证机构签发的证书,以避免安全警告。
84 13
|
2月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
147 3
|
2月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
61 4
|
3月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
164 25
|
3月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
57 18
|
4月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
5月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
368 32
|
5月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
99 26
|
5月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
102 17
|
7月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
259 13