1.if的基本语法
if与[之间要有空格
[]与判断条件之间也必须有空格
]与;之间不能有空格
2.对字符串的判断
if [ str1=str2 ];then fi #当两个字符串相同时返回真
if [ str1!=str2 ];then fi #当两个字符串不相等时返回真
if [ -n str1 ];then fi #当字符串的长度大于0时返回真 (判断变量是否有值)
if [ -z str1 ];then fi #当字符串的长度为0时返回真
3.格式
单分支语句结构
if [ 条件表达式 ]; then 指令 fi
双分支语句结构
if [ 条件表达式 ]; then 指令一 else 指令二 fi
多分支语句结构
if [ -f file ]; then echo "yes yes yes" elif [ -z file ]; then echo "yes yes" else echo "nonono" fi
4.if else
单独的一个 if else 语句,如下所示:
if condition then 符合 condition 的执行语句 else 不符合 condition 的执行语句 fi
这里 then 也可以写到与 if 在一行中。
if else 语句
#!/bin/bash file="/root" if [ -d $file ] then echo "$file is directory!" else echo "$file is not directory!" fi
5.if elif
注意:Shell 里将 else if 简写为 elif,elif 也要有 then,如下所示:
if condition_1 then 符合 condition_1 的执行语句 elif condition_2 then 符合 condition_2 的执行语句 else 不符合 condition_1 和 condition_2 的执行语句 fi
if elif 语句
#!/bin/bash
file="/root"
if [ -f $file ]
then
echo "$file is regular file!"
elif [ -d $file ]
then
echo "$file is directory!"
else
echo "$file is not regular file and directory"
fi
6.else和elif区别
在Shell脚本中,else和elif都是用于在if语句中处理多个条件的关键字。
else:else关键字用于在if语句中处理当条件为假时执行的代码块。当if语句中的条件为假时,else后面的代码块将被执行。
例如:
if [ condition ]; then # 如果条件为真,则执行这里的代码 else # 如果条件为假,则执行这里的代码 fi
elif:elif关键字用于在if语句中处理多个条件的情况。当if语句中的第一个条件为假时,会检查elif后面的条件,如果有条件为真,则执行对应的代码块。
例如:
if [ condition1 ]; then # 如果条件1为真,则执行这里的代码 elif [ condition2 ]; then # 如果条件1为假,但条件2为真,则执行这里的代码 else # 如果条件1和条件2都为假,则执行这里的代码 fi
因此,else用于处理if语句中的默认情况(即当所有条件都为假时执行的代码),而elif用于处理多个条件的情况,当第一个条件为假时,检查下一个条件。这两个关键字在if语句中一起使用,可以实现更复杂的条件逻辑。
7.条件表达式的内容
字符串的判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
文件的判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
复杂逻辑判断
条件表达式中可能有多个条件,需要使用与或非等逻辑操作。
-a:与 -o:或 !:非
案例
!/bin/bash
read -p “请输入你的分数:” score
if [ $score -ge 0 ]&&[ $score -lt 60 ];then
echo “sorry,you are lost!”
elif [ $score -ge 60 ]&&[ $score -lt 85 ];then
echo “just soso!”
elif [ $score -le 100 ]&&[ $score -ge 85 ];then
echo “good job!”
else
echo “input score is wrong , the range is [0-100]!”
fi
当然,上面的实例也可以用 -a 来改写:
!/bin/bash
read -p “请输入你的分数:” score
if [ $score -ge 0 -a $score -lt 60 ];then
echo “sorry,you are lost!”
elif [ $score -ge 60 -a $score -lt 85 ];then
echo “just soso!”
elif [ $score -le 100 -a $score -ge 85 ];then
echo “good job!”
else
echo “input score is wrong , the range is [0-100]!”
fi
输入两个整数 使用if判断两个整数谁大谁小或等于
通过不同的系统版本号 安装不同的YUM源
8.二级菜单
在Shell脚本中,二级菜单是指一个菜单系统中的第二层菜单,通常用于提供更多的选项和功能。二级菜单通常在用户选择一级菜单中的选项后出现,以便用户进一步细化他们的选择。
在Shell脚本中创建二级菜单通常使用嵌套的case语句或者多个if-else语句来实现。一般情况下,一级菜单会提示用户选择一个选项,然后根据用户的选择进入相应的二级菜单。在二级菜单中,用户可以再次选择一个选项,然后执行相应的操作或者进入更深层的菜单。
二级菜单在Shell脚本中通常用于提供更多的选项和功能,使得脚本更加灵活和交互性更强。它可以用于管理多个选项和版本,执行不同的操作,或者进一步细化用户的选择。
创建一个二级菜单需要考虑用户输入的合法性,以及根据用户的选择执行相应的操作。合理设计和实现二级菜单可以使Shell脚本更加友好和易用
shell二级菜单case
在Shell脚本中,可以使用case语句来实现二级菜单。case语句允许你根据用户的输入进行多个选项的匹配,从而执行相应的操作。
下面是一个简单的示例,演示了如何使用case语句实现二级菜单:
echo "Select an option:" echo "1. Option 1" echo "2. Option 2" read FIRST_OPTION case $FIRST_OPTION in 1) echo "You selected Option 1" # 进入第二级菜单 echo "Select a sub-option:" echo "a. Sub-option A" echo "b. Sub-option B" read SUB_OPTION case $SUB_OPTION in a) echo "You selected Sub-option A" # 在这里添加Sub-option A的相关代码 ;; b) echo "You selected Sub-option B" # 在这里添加Sub-option B的相关代码 ;; *) echo "Invalid sub-option" ;; esac ;; 2) echo "You selected Option 2" # 在这里添加Option 2的相关代码 ;; *) echo "Invalid option" ;; esac
在上面的示例中,根据用户选择的第一级选项,进入了相应的二级菜单。在二级菜单中,使用了嵌套的case语句来处理用户的进一步选择。
通过合理设计和嵌套case语句,可以实现复杂的菜单系统,提供更多选项和功能,使得Shell脚本更加灵活和交互性更强。
shell二级菜单if-else
在Shell脚本中,也可以使用多个嵌套的if-else语句来实现二级菜单。通过逐级的条件判断,可以让用户在不同的选项下进入不同的二级菜单或执行不同的操作。
以下是一个简单的示例,演示了如何使用if-else语句实现二级菜单:
echo "Select an option:" echo "1. Option 1" echo "2. Option 2" read FIRST_OPTION if [ $FIRST_OPTION -eq 1 ]; then echo "You selected Option 1" # 进入第二级菜单 echo "Select a sub-option:" echo "a. Sub-option A" echo "b. Sub-option B" read SUB_OPTION if [ "$SUB_OPTION" = "a" ]; then echo "You selected Sub-option A" # 在这里添加Sub-option A的相关代码 elif [ "$SUB_OPTION" = "b" ]; then echo "You selected Sub-option B" # 在这里添加Sub-option B的相关代码 else echo "Invalid sub-option" fi elif [ $FIRST_OPTION -eq 2 ]; then echo "You selected Option 2" # 在这里添加Option 2的相关代码 else echo "Invalid option" fi
在上面的示例中,根据用户选择的第一级选项,通过多个嵌套的if-else语句进入了相应的二级菜单或执行相应的操作。
使用if-else语句实现二级菜单同样可以达到和case语句类似的效果,只是代码结构略有不同。合理设计和嵌套if-else语句同样可以实现复杂的菜单系统,提供更多选项和功能,使得Shell脚本更加灵活和交互性更强。
f-else和case的区别
在Shell脚本中,if-else语句和case语句都用于进行条件判断和分支控制,但它们在语法结构和适用场景上有一些区别。
if-else语句:
用于对条件进行逐一判断,根据条件的真假执行不同的代码块。
适用于需要进行复杂的条件判断,每个条件可能是一个表达式,可以使用逻辑运算符(如&&、||)组合多个条件。
语法结构较为灵活,可以处理各种复杂的条件逻辑。
适用于需要对范围、大小关系等复杂条件进行判断的情况。
case语句:
用于根据一个变量的取值,执行与每个取值相关联的代码块。
适用于需要进行多个取值的简单匹配,每个取值对应一个代码块。
语法结构简洁,适用于处理多个取值的情况,可以使得代码更加清晰和易读。
适用于对多个离散取值进行匹配的情况,例如菜单选择、状态判断等。
总的来说,if-else语句适用于复杂的条件判断,而case语句适用于对多个离散取值进行匹配。在实际编程中,根据具体的条件逻辑和需求,可以灵活选择使用if-else语句或case语句。
案例
[root@shell /server/scripts]$ cat er.sh #!/bin/bash # 一级菜单 echo "Select a service:" echo "1. Nginx" echo "2. PHP" echo "3. Redis" echo "4. MySQL" read FIRST_OPTION case $FIRST_OPTION in 1) # 二级菜单 - Nginx echo "Select a version of Nginx:" echo "a. Nginx 1.18" echo "b. Nginx 1.20" echo "c. Nginx 1.22" read NGINX_OPTION case $NGINX_OPTION in a) echo "You selected Nginx 1.18" # 在这里添加Nginx 1.18的相关代码 ;; b) echo "You selected Nginx 1.20" # 在这里添加Nginx 1.20的相关代码 ;; c) echo "You selected Nginx 1.22" # 在这里添加Nginx 1.22的相关代码 ;; *) echo "Invalid option" ;; esac ;; 2) # 二级菜单 - PHP echo "Select a version of PHP:" echo "x. PHP 7.3" echo "y. PHP 7.4" echo "z. PHP 8.0" read PHP_OPTION case $PHP_OPTION in x) echo "You selected PHP 7.3" # 在这里添加PHP 7.3的相关代码 ;; y) echo "You selected PHP 7.4" # 在这里添加PHP 7.4的相关代码 ;; z) echo "You selected PHP 8.0" # 在这里添加PHP 8.0的相关代码 ;; *) echo "Invalid option" ;; esac ;; 3) # 二级菜单 - Redis echo "Select a version of Redis:" echo "m. Redis 5.0" echo "n. Redis 6.0" echo "o. Redis 6.2" read REDIS_OPTION case $REDIS_OPTION in m) echo "You selected Redis 5.0" # 在这里添加Redis 5.0的相关代码 ;; n) echo "You selected Redis 6.0" # 在这里添加Redis 6.0的相关代码 ;; o) echo "You selected Redis 6.2" # 在这里添加Redis 6.2的相关代码 ;; *) echo "Invalid option" ;; esac ;; 4) # 二级菜单 - MySQL echo "Select a version of MySQL:" echo "p. MySQL 5.7" echo "q. MySQL 8.0" echo "r. MySQL 8.0" read MYSQL_OPTION case $MYSQL_OPTION in p) echo "You selected MySQL 5.7" # 在这里添加MySQL 5.7的相关代码 ;; q) echo "You selected MySQL 8.0" # 在这里添加MySQL 8.0的相关代码 ;; r) echo "You selected MySQL 8.0" # 在这里添加MySQL 8.0的相关代码 ;; *) echo "Invalid option" ;; esac ;; *) echo "Invalid option" ;; esac