目录
一、判断用户参数
1.1 文件判断参数
PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行。详情可参考我另一篇博客:https://www.cnblogs.com/HeiDi-BoKe/p/11635473.html
补充:逻辑语句有三个(与:&&,或:||,非:!)
实例:
1.2 比较运算符
实例:
#FreeMem=`free -m | grep Mem: | awk '{print $4}`#echo $FreeMem
1.3 字符串比较符
实例:
二、流程控制语句
下面介绍if、for、while、case这4中流程控制语句
2.1 if条件判断语句
if语句分为单分支,双分支,多分支
2.1.1 if单分支语句
单分支语句结构由if、then、fi关键词组成,只在条件成立才执行预设的语句。即如果...那么...
语法:
if条件表达式;then
命令
fi
实例:
#vi ifDemo.sh#!/bin/bash
DIR=/tmp/test/
if [ ! -e $DIR];then
echo"$DIR 目录不存在"mkdir-p /tmp/test
fi
echo"$DIR 目录已存在"
2.1.2 if双分支语句
双分支语句结构由if、then、else、fi关键词组成,判断第一次的条件,如果匹配则执行,如果不匹配则执行else后面的命令。即如果...那么...或者...那么...
语法:
if条件表达式;then
命令1else命令2
fi
实例:
#验证某台主机是否在线(这里使用从参数读取ip和直接写脚本中)#ping -c 指定次数,-i指定每个数据发送的间隔 -W指定等待时间#方法一:从参数读取ip#vi ifelseDemo.sh#!/bin/bash
if [ $#-eq 0 ];then
echo "[usage] 请使用./ifelseDemo.sh ip地址"exit0fi
ping-c 3 -i 0.2 -W 3 $1 &> /dev/nullif [ $? -eq 0];then
echo"$1 是通的"
elseecho"$1 是不通的"fi#方法二:将ip直接写脚本里#vi ifelseDemo2.sh#!/bin/bash
if `ping -c 3 106.53.73.200 &> /dev/null`;then
echo"通的"
elseecho"不通"fi
2.1.3 if多分支语句
多分支语句结构由if、then、else、elif、fi关键词组成,进行多次条件匹配,匹配成功则执行对应的预设语句。即如果...那么..如果...那么...
语法:
if条件语句1;then
命令1
elif 条件语句2;then
命令2
...else命令
fi
实例:
#vi grade.sh#!/bin/bash
read -p "请输入你的成绩(0-100):"GRADEif [ $GRADE -gt 100 ] || [ $GRADE -lt 0];then
echo"[info] 您输入的成绩无效,请输入(0-100)之间包括0和100的数"elif [$GRADE -ge 85 ] && [ $GRADE -le 100];then
echo"$GRADE is Execllent"elif [$GRADE -ge 70 ] && [ $GRADE -le 84];then
echo"$GRADE is Pass"
elseecho"$GRADE is Fail"fi
注意:一个[]表示判断文件或目录等是否存在,两个[[]]表示做运算判断(也可以写成[] && []或[] || [])
2.2 for循环语句
for语句能一次读取多个信息,然后逐一对信息进行操作处理
语法:
语法一:
for 变量名 in取值列表do命令
done
语法二:
for ((expr1;expr2;expr3));do 命令列表 done
实例:
#提前准备好用户的文件
[root@VM_0_10_centos shellScript]#vi username.txt
test01
test02
test03
test04
test05
test06#vi example.sh#!/bin/bash
read -p "请输入用户密码:"PASSWDfor UNAME in`cat username.txt`doid$UNAME &> /dev/nullif [ $? -eq 0]
then
echo"$UNAME user is exists"
elseuseradd$UNAME &> /dev/null
echo"$PASSWD" | passwd --stdin $UNAME &> /dev/nullif [ $? -eq 0]
then
echo"$UNAME,Create success"
elseecho"$UNAME,Create failure"fi
fi
done
#大于数字1小于数字10#cat for.sh#!/bin/bash
for ((i=1;i<10;i++))doecho$idone#结果#./for.sh
1
2
3
4
5
6
7
8
9
#检查多个主机是否存活#cat ip.sh#!/bin/bash
for IP in ip地址
do
if `ping -c 2 $IP &> /dev/null`
then
echo-e "$IP OK"
elseecho"$IP NO"fi
done#结果#./ip.sh
ip地址OKip地址 OK
#检查多个域名是否可以访问#cat http.sh#!/bin/bash
URL="域名1www.baidu.com"
for i in $URL
doHTTP=`curl -i -m 10 -o /dev/null -s -w %{http_code}"\n" http://$i`if [ $HTTP -eq 200 -o $HTTP -eq 301]
then
echo"$i OK"
elseecho"$i NO"fi
done#结果#./http.sh
域名1 NO
www.baidu.com OK
2.3 while语句
while语句通过判断条件的真假来决定是否执行命令。条件为真则执行,为假则结束循环。当表达式为true时,会变成死循环
语法:
while条件do命令
done
补充:
1)break:终止循环
2)continue:跳出当前循环,执行下一个循环
2.4 case条件语句
用于选择性的执行对应的命令
语法:
case 模块名 in模式1)
命令;;
模式2)
命令;;
...*)
命令
esac
实例:
#cat case.sh#!/bin/bash
read -p "请输入任意字符,并按Enter键确认:"KEY
case$KEY in[a-z][A-Z])
echo"您输入是字母。";;
[0-9])
echo"您输入是数字。";;*)
echo"您输入是空格,下划线,功能键或其他"esac
2.5 Until循环语句
#知道满足条件才退出,否则执行action
until条件doaction
done
三、选择语句
select语句:
select 变量名 in语句doaction
done
[root@rhel8 shell]#cat select_menu.sh#!/bin/bash
PS3="Select your will exec Menu:"select iin "Apache" "MySQL" "PHP"
docase$i inApache)
echo"wait install httpd server...";;
MySQL)
echo"wait install MySQL server...";;
PHP)
echo"wait install PHP server...";;*)
echo-e "\033[32mUsage: { $0 Apache|MySQL|PHP|help}\033[0m";;
esac
done