这也是一个双分支
! | 取反 |
&& | 且 全真则真 ,一假即假 |
| | | 或 全假才假 ,一真即真 |
使用格式 | cmd1 && cmd2 || cmd3 如果cmd1成功执行cmd2 如果cmd1不成功就执行cmd3 |
如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作
原理:
格式:
if [ 条件判断式 ]; then
当条件判断成立时,可以进行的命令工作内容
fi #这里将if反过来写,结束if语句的意思
原理:
在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:
格式:
if [ 条件判断式 ]; then
当条件判断成立时,可以进行的命令工作内容
else
当条件判断不成立时,可以进行的命令工作内容
fi
实验:
目的:先检测80端口是否开启,如果开启则反馈httpd正在运行,否则启动httpd服务
#!/bin/bash
#先检测80端口是否开启,如果开启则反馈httpd正在运行,否则 启动httpd 服务
systemctl status httpd
if [ $? -eq 0 ];then
echo "http 服务正在运行"
else
systemctl start httpd &>/dev/null
if [ $? -eq 0 ];then
echo "http服务正常启动"
else
echo "服务没有运行请检查"
fi
fi
如果数据需要进行多种不同的判断,则可以使用多分支结构
原理:
格式:
if [ 条件判断式 ]; then
当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]; then
当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式三 ]; then
当条件判断成立时,可以进行的命令工作内容
else
当上面的条件判断都不成立时,可以进行的命令工作内容
fi
#!/bin/bash
#安装httpd服务 先判断操作系统 如果centos 用yum 装 如果是ubuntu 用apt装 其他暂不支持
if grep -q centos /etc/os-release
then
yum install httpd -y &> /dev/null
if [ $? -eq 0 ]
then
echo "安装成功"
else
echo "安装失败请检查"
fi
elif grep -q ubuntu /etc/os-release
then
apt install apache2 -y &>/dev/null
if [ $? -eq 0 ]
then
echo "安装成功"
else
echo "安装失败请检查"
fi
else
echo "您的操作系统暂时不支持"
fi
实验目的:
定义下:90-100 为优秀 70-89良好 60-69 及格 0-59 不及格 其他输入有误请重新输入
方法一:
#!/bin/bash
# 90-100 为优秀 70-89良好 60-69 及格 0-59 不及格 其他输入有误请重新输入
read -p "请输入您的分数(0-100的正整数):" grade
if [ $grade -ge 90 -a $grade -le 100 ];then
echo "优秀"
elif [ $grade -ge 70 -a $grade -le 89 ];then
echo "良好"
elif [ $grade -ge 60 -a $grade -le 69 ];then
echo "及格"
elif [ $grade -ge 0 -a $grade -le 59 ];then
echo "不及格"
else
echo "输入有误,请重新输入"
bash $0
fi
~
方法二:
#!/bin/bash
#考试分数在90-100为优秀,70-89为良好,60-69为合格,低于60为不合格
read -p "请输入你的考试分数:" grade
if [ $grade -ge 90 ] && [ $grade -le 100 ];then
echo "你的成绩为$grade"
echo "你的成绩为优秀"
elif [ $grade -ge 70 ] && [ $grade -le 89 ];then
echo "你的成绩为$grade"
echo "你的成绩为良好"
elif [ $grade -ge 60 ] && [ $grade -le 69 ];then
echo "你的成绩为$grade"
echo "你的成绩为合格"
else
echo "你的成绩为$grade"
echo "你的成绩不合格"
fi
方法一:
#!/bin/bash
#接下来的是石头剪刀布的游戏
read -p "请输入1(布)2(剪刀)3(石头): " ren
m=`echo $[RANDOM%3+1]`
if [ $ren -eq $m ]
then
echo "打成平局了哈"
elif [ $ren -eq 1 -a $m -eq 3 -o $ren -eq 2 -a $m -eq 1 -o $ren -eq 3 -a $m -eq 2 ]
then
echo "哇哦,太棒了,你赢了"
else
echo "呜呜呜,你输了"
bash $0
fi
~
方法二:
#!/bin/bash
#接下来的是石头剪刀布的游戏
read -p "请输入1(布)2(剪刀)3(石头): " ren
m=`echo $[RANDOM%3+1]`
case $ren in
1)
ren="布"
;;
2)
ren="剪刀"
;;
3)
ren="石头"
;;
esac
case $m in
1)
m="布"
;;
2)
m="剪刀"
;;
3)
m="石头"
;;
esac
if [ $ren = $m ]
then
echo "打成平局了哈"
echo "你出的是: $ren "
echo "计算机出的是: $m "
elif [ $ren = "布" -a $m = "石头" -o $ren = "剪刀" -a $m = "布" -o $ren = "石头" -a $m = "剪刀" ]
then
echo "哇哦,太棒了,你赢了"
echo "你出的是: $ren "
echo "计算机出的是: $m "
else
echo "呜呜呜,你输了"
echo "你出的是: $ren "
echo "计算机出的是: $m "
bash $0
fi
在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。
awk 比较倾向于将一行分成多个“字段”然后再进行处理,以空格为分隔符
awk 执行结果可以通过 print 的功能将字段数据打印显示
常见选项:
-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
-v 变量赋值
语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本
case
语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 语非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个量的不同取值
case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b
注意点:
case行首必须以单词“in”,每一模式必须以单个右括号 )
双分号 ;; 表示命令序列的结束
格式:
case 变量值 in
模式1)
命令序列
;;
模式2)
命令序号
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac
#!/bin/bash
#输入一个字符,判断输入的是 字母 数字 还是 特殊字符
read -p "请输入一个字符:" zifu
case $zifu in
[a-z]|[A-Z])
echo "您输入的是字母"
;;
[0-9])
echo "您输入的是数字"
;;
*)
echo "您输入的是特殊字符哈"
;;
esac
目的:判断输入的是 yes( y,Y ,yES,yeS,YES,yeS,yEs) 或者no (N ,n ,NO, No)
#!/bin/bash
#判断输入的是 yes( y,Y ,yES,yeS,YES,yeS,yEs) 或者no (N ,n ,NO, No)
read -p "请输入yes或者no:" i
case $i in
[yY]|[yY][eE][sS])
echo "您输入的是yes"
;;
[nN]|[Nn][oO])
echo "您输入的是no"
;;
*)
echo "您输入有错误请重新输入"
bash $0
esac
方法一:
方法二:
#!/bin/bash
#判断输入的是 yes( y,Y ,yES,yeS,YES,yeS,yEs) 或者no (N ,n ,NO, No)
read -p "请输入yes或者no:" i
nihao=`echo $i|tr 'A-Z' 'a-z'`
case $nihao in
y|yes)
echo "您输入的是yes"
;;
n|no)
echo "您输入的是no"
;;
*)
echo "您输入有错误请重新输入"
bash $0
esac
先定义个变量看看
实验开始了:
#!/bin/bash
cat << EOF
echo "--------------------------------------------------"
1.查看内存
2.查看主机名
3.内核
4.磁盘大小
5.退出工具箱
echo "---------------------------------------------------"
EOF
read -p "请输入您的选择(1-5):" num
case $num in
1)
free
echo "---------------------------------------------------"
bash $0
;;
2)
hostname
bash $0
;;
3)
uname -r
bash $0
;;
4)
lsblk |grep disk|awk '{print $4}'
bash $0
;;
5)
exit
;;
esac