1、if条件语句

结构

if [[ 判断条件 ]]; then
  语句...
fi

判断系统文件是否存在:

# !/bin/bash
if [ ! -d  /data/2023 -a ! -d /tmp/2022/ ];then
    mkdir -p /data/2023
fi

if 常见整型比较逻辑运算符

运算符

含义

-eq

等于,应用于整型比较 equal;

-ne

不等于,应用于整型比较 not equal;

-lt

小于,应用于整型比较 letter;

-gt

大于,应用于整型比较 greater;

-le

小于或等于,应用于整型比较;

-ge

大于或等于,应用于整型比较;

if 常见非数字整型判断逻辑比较符

运算符

含义

-f

判断文件是否存在 eg: if [ -f filename ];

-d

判断目录是否存在 eg: if [ -d dir ];

-a

双方都成立(and) 逻辑表达式 –a 逻辑表达式;

-o

单方成立(or) 逻辑表达式 –o 逻辑表达式;

-z

空字符串;

||

单方成立;

&&

双方都成立表达式。

2、if 判断括号区别

在使用 if 语句时,经常会使用 () 、(()) 、[] 、 [[]] 、{} 等括号,如下为几种括号简单区别对比:

()
# 用于多个命令组合、命令替换、初始化数组;
​
(())
# 整数扩展、运算符、重定义变量值、算术运算比较;
​
[]
# bash 内部命令,与 test 是等同的,正则字符范围、引用数组元素编号,不支持 +-*/ 数学运算符,逻辑测试使用 -a、-o;
​
[[]]
# bash程序语言的关键字,不是一个命令、[[]]结构比[]结构更加通用,不支持 +-*/ 数学运算符,逻辑测试使用&&、||;
​
{}
# 主要用于命令集合或者范围,例如 mkdir -p /data/201{7,9}

3、for 循环语句

for 循环语句主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表。其语法格式以 for...do 开头 done 结尾。

for var in (表达式)
do
    语句...
done


4、while 循环语句

While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾。语法格式如下:

while  (表达式)
do
    语句...
done


5、case 选择语句

Case选择语句,主要用于对多个选择条件进行匹配输出,与if elif语句结构类似,通常用于脚本传递输入参数,打印出输出结果及内容,其语法格式以Case…in开头,esac结尾。语法格式如下:

case  $1  in  
    Pattern1)
    语句1 
    ;;  
    Pattern2)
    语句2
    ;;  
    Pattern3)
    语句3
    ;;  
    *)
    语句n
esac

6、select 循环选择语句

Select语句一般用于选择,常用于选择菜单的创建,可以配合PS3来做打印菜单的输出信息,其语法格式以selct…in do开头,done结尾:

select  I  in (表达式) 
do
    语句
done

Select选择语句Shell脚本编程案例如下:

(1) 打印开源操作系统选择:

#!/bin/bash
#By author yuedu.net 2017
PS3="What you like most of the open source system?"
select i in CentOS RedHat Ubuntu 
do
    echo "Your Select System: "$i
done

执行结果

[root@localhost yubo]# sh select.sh 
1) CentOS
2) RedHat
3) Ubuntu
What you like most of the open source system?1
Your Select System: CentOS
What you like most of the open source system?2
Your Select System: RedHat
What you like most of the open source system?
``



7、shell 函数

Shell允许将一组命令集或语句形成一个可用块,这些块称为Shell函数,Shell函数的用于在于只需定义一次,后期随时使用即可,无需在Shell脚本中添加重复的语句块,其语法格式以function name(){开头,以}结尾。

Shell编程函数默认不能将参数传入()内部,Shell函数参数传递在调用函数名称传递,例如name args1 args2。

function name (){
        command1
        command2
        ........
}
name args1 args2