目录
一、test命令
1.作用:测试文件的表达式是否成立
2.选项
-e 测试文件和目录是否存在
-f 测试是否为文件
-r 测试当前用户是否有读取权限
-w 测试当前用户是否有写的权限
-x 测试当前用户是否有执行的权限
test和[]作用相同
使用[]内部两边需要有空格
linux中使用判断
1.test
2.[]
3.[[]] 加强版的单个[]可以使用正则表达式和通配符(匹配字符串)如果使用[[]]判断是否相等用[[ == ]]
二、比较数值
1.公式:[ 整数1 -操作符 整数2 ]
2.选项
-eq :第一个数等于第二个数
-ne :第一个数不等于第二个数
-gt :第一个数大于第二个数
-lt :第一个数小于第二个数
-ge :第一个数大于等于第二个数
-le :第一个数小于等于第二个数
三、字符串比较
= 字符串内容相同
!= 字符串内容不相同
-z 字符串内容为空
-n 字符是否存在
四、短路与短路或
1.短路与
全真才为真一假即假
cmd1 && cmd2 cmd1和cmd2都为真才为真
cmd1或cmd2有一个假就全部为假
如果第一个为假 ,整个 就为假 不用执行下个操作
2.短路或
全假为假一真为真
cmd1 || cmd2 cmd1和cmd2有一个为真就是真
cmd1和cmd2全假才为假
如果第一个 为真 那么 不用执行第二个操作
常见条件
-a或&&:逻辑与,“而且”的意思全真才为真
-o或||:逻辑或,“或者”的意思一真即为真
!:逻辑否
五、()和{}
(CMD1;CMD2;...)和 { CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行
( cd /opt;ls ) 切换目录并查看
pwd 查看当前路径
{ cd /opt;ls; }
pwd
六、if语句
1.分支结构
1.单分支
if 判断条件;
then
条件为真的分支代码
fi
2.双分支
if 判断条件;
then
条件为真的分支代码
else
条件为假的分支代码
fi
3.多分支
if 判断条件1
then
条件1为真的分支代码
elif 判断条件2
then
条件2为真的分支代码
elif 判断条件3;then
条件3为真的分支代码
...
else
以上条件都为假的分支代码 托底
fi
七、脚本小测试
1.测试1检测当前用户是否为管理员
#!/bin/bash
if [ "$USER" != "root" ]
then
echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi
2.测试2检测与真机是否网络通畅
#!/bin/bash
ping -c 3 192.168.91.1
if
[ $? = 0 ]
then
echo "与真机网络通顺"
exit 1
fi
echo "与真机网络不通"
3.测试3检测输入的成绩评分
#!/bin/bash
read -p "请输入你的成绩:" b
if [ $b -ge 90 -a $b -le 100 ]
then
echo "优秀"
elif [ $b -ge 70 -a $b -lt 90 ]
then
echo "良好"
elif [ $b -eq 60 ]
then
echo "及格"
elif [ $b -lt 60 ]
then
echo "不及格"
else
bash $0
fi
4.测试4检测httpd服务
#!/bin/bash
ss -natp |grep 80
if [ $? -eq 0 ]
then
echo "http服务已开启"
else
systemctl start httpd &>/dev/null
ss -natp |grep 80
if [ $? -eq 0 ]
then
echo "http服务已开启"
else
echo "http服务开启失败"
fi
fi
5.测试5创建用户
#!/bin/bash
read -p "请输入你要新建的用户:" name
read -p "请输入你要密码:" mima
grep $name /etc/passwd &>/dev/null
if [ $? -eq 0 ]
then
echo "用户名重复了"
else
useradd $name
echo "$mima" |passwd --stdin $name
echo "创建成功"
fi
6.测试6安装nginx
#!/bin/bash
wget http://nginx.org/download/nginx-1.18.0.tar.gz -P /opt
if [ $? -eq 0 ]
then
echo "下载成功"
else
echo "下载失败"
fi
cd /opt
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/apps/nginx
if [ $? -eq 0 ]
then
echo "环境检查成功"
else
echo "环境检查失败"
fi
make -j2 && make install
if [ $? -eq 0 ]
then
echo "编译成功"
else
echo "编译失败"
then
echo "编译成功"
else
echo "编译失败"
fi
ln -s /apps/nginx/sbin/* /usr/bin
echo "
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
" > /usr/lib/systemd/system/nginx.service
systemctl start nginx
if [ $? -eq 0 ]
then
echo "启动成功"
else
echo "启动失败"
fi
八、case语句
case 多分支结构
case 变量值 in 模式1
命令序列1)
;;
模式2
命令序列2
;;
...
*)
默认命令序列
esac
1.case检测成绩
#!/bin/bash
read -p "请输入你的分数" score
case $score in
100)
echo "$score 优秀"
;;
[89][0-9])
echo "$score 良好"
;;
[67][0-9])
echo "$score 及格"
;;
[0-9]|[1-5][0-9])
echo "$score 不及格"
;;
*)
echo "输入有误"
esac
2.小游戏脚本
#!/bin/bash
m=`echo $[RANDOM%3+1]`
read -p "请输入 1.石头2.剪刀3.布:" h
if [ $m -eq $h ]
then
echo "打成平局"
bash $0
elif [ $h -eq 1 -a $m -eq 2 -o $h -eq 2 -a $m -eq 3 -o $h -eq 3 -a $m -eq 1 ]
then
echo "人类胜利"
else
echo "机器胜利"
fi
3.小型菜单
cat <<EOF
1.查看读写
2.查看磁盘
3.查看内存
EOF
read -p "请输入数字(1-3):" num
case $num in
1)
vmstat $web1
;;
2)
lsblk -f $mysql
;;
3)
free -h $doker
;;
esac