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