Shell编程-语法篇-判断与循环

一.目标

掌握语法:变量,环境变量,判断,循环,函数

案例:

  • 定时巡检脚本
  • 安装部署脚本
    • 手动安装记录流程
    • 书写脚本,自动化完成
  • 服务管理脚本
    • 未来推荐直接使用systemctl即可
    • 无法直接使用,需要书写脚本
  • 系统检查脚本/系统优化脚本/系统安全加固脚本
  • 其他功能脚本
    • 备份脚本
    • …..

二.判断

  • 条件测试语句 test == [] 文件类型,比较大小,字符串对比,逻辑判断(与或非)
  • if
  • case语句

2.1 []

  • 很少单独使用,基本上与if一起使用
  • 隐藏用法与&&,|| 搭配使用,实现初级简单判断
&& and符号 并且 前一个命令执行成功了,然后执行后面的命令,简单的判断
|| 或 前一个命令执行失败了,然后执行后面的命令

2.1.1 文件类型判断

文件类型判断说明应用场景
-ffile 检查文件是否存在
-ddirectory 检查目录是否存在操作目录之前检查目录是否存在
-h/-L是否存在,是否为软连接
-xx权限,检查是否存在并是否有x权限检查命令是否存在,未来使用which即可
-s文件内容是否存在文件内容是否大于0
[ -f /etc/hosts ] && echo 成功 || echo 失败
[ -d /etc/ ] && echo 成功 || echo 失败
[ -x /bin/ls ] && echo 成功 || echo 失败
[ -L /etc/rc.local ] && echo 成功 || echo 失败

2.1.2 比大小

温馨提示:比大小只能比较整数,无法比较小数(浮点数)
比较大小说明对应的符号
-eq等于==
-ne不等于!=
-gt大于>
-ge大于等于>=
-lt小于<
-le小于等于<=

2.1.3 字符串

字符串对比说明应用场景
“串1” = “串2”字符串等于不方便使用数字,可以使用字符串
“串1” = “串2”字符串不等于不方便使用数字,可以使用字符串
-z “变量”变量/字符为空,则成功检查变量是否为空
-n “变量”变量/字符不为空,则成功检查变量是否为空
#1.vars
name=”$*”
echo “请睁开眼睛看 服务是否启动与开机自启动,后续改为if判断”
systemctl is-active $name
systemctl is-enabled $name

#2.check var
if [ $# -eq 0 ];then
echo “Usage: bash $0 server name”
exit 1
fi

#3.user
user=”$*”
echo “该用户的情况”
id $user

2.1.4 逻辑运算

  • 与或非
逻辑运算说明
与(并且)and-a 多个条件同时成立
或(或者)or-o 多个条件有一个成立就行
非(取反)!取反

2.1.5正则

  • 做判断
  • $# 参数个数
  • -z 变量是否为空
  • 使用正则匹配
  • [ ] vs [[ ]]
    • 区别:[]支持不正则,[[ ]] 支持正则

2.2 if

if判断说明应用场景
if单分支脚本开头做检查检查变量,参数个数,命令,数字
if二分支2种情况状态检查,服务检查,端口
if多分支3种情况,多条件多种情况使用多级别检查

2.3 case语句

  • 类似于if多分支判断
  • case用于实现菜单选择功能,而不是真的做范围的对比
  • 列出选择,用户进行选择即可
  • 应用场景:
    • 多功能的安装脚本
    • 判断系统(红帽系统,ubt/debainxt)
    • 服务管理脚本
  • case格式
case “变量” in
1) echo 内容 ;;
2) echo 内容 ;;
*)echo 输入错误重新输入 ;;
esac

#注意*表示所有 用于兜底
  • read
cat<<EOF
内容
EOF
read -p “请输入您的选择”num

case “变量” in
1) echo 内容 ;;
2) echo 内容 ;;
*)echo 输入错误重新输入 ;;
esac
  • source bash/sh 运行脚本
    • bash /sh 运行脚本即可
    • 通过source 加载其他文件内容(变量文件);比如:/etc/os-release文件内容

三. 循环

  • for循环
  • while循环

3.1 for循环

for 变量名字 in 变量值清单(列表)
do
执行的命令
done
1.获取所有磁盘分区 挂载/分区名 /etc/fstab 排除swap 空行 注释行
2.丢到循环中
1)df -h 挂载点 创建变量
2)分区名
3)大小
4)使用率
5)输出

3.2 while

3.2.1介绍与格式

  • 应用场景:
    • 死循环
    • 读取文件内容
满足条件才会进行循环
while 条件命令
do
需要执行的命令
done

3.2.2 死循环

需要书写巡检脚本,精确到秒进行检查

3.2.3 编写脚本为死循环形式实现每5秒检查

3.2.4 while读取文件

#方案01 推荐使用
line 变量名字
while read line
do
内容命令
done < 文件名

#方案02 使用管道的时候
line 变量名字
cat 文件名 | while read line
do
内容命令
done

#方案03 几乎不用
exec< 文件名
while read line
do
内容命令
done

3.3循环控制语句

循环控制语句说明
break打断,结束循环
continue跳过,结束当前循环进行下次循环
exit结束脚本
return函数结尾,给函数设置返回值

3.3.1 书写一个猜数字的脚本

1.生成一个1-100的随机数字1
2.死循环
1)输入一个数字
2)检查是否为数字,负责重新输入(跳过当前循环进行下次)
3)输入数字后 对比 大于,小于,等于 并进行输出
a)等于则输出等于并结束循环
b)大于输出大于,减小一点
c)小于输出小于,增大一点
3.猜数字结束,数字是xxx

随机数字
num=$((RANDOM%100+1))

四、计算操作

计算方案应用
let整数常用 let i=i+1 == let i ++
$(())整数RANDOM%100 取余
$[]整数
expr整数用于检查输入是否为数字,现在我们使用正则检查即可
awk小数
bc小数

4.1 bc使用与控制小数位数

echo “scale=2;10/3” | bc -l
输出:3.33
scale=2;小数点后2位

4.2 awk计算

五、函数

  • 脚本更加专业.模块化
  • 创建自己的函数库
  • 本质:类似于我们自定义的1个2命令
  • 注意事项:函数名字不用与名字相同
创建函数
方法01:
function 函数名字(){
函数内容/命令
}

方法02:
函数名字(){
函数内容/命令
return $?
}

方法03:
funtion 函数名字 {
函数内容/命令
return $?
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇