shell编程三

5.2.3 expr

使用注意事项:

1. 使用空格,

2. 对*号转义.

# expr 进行计算的时候结果为0 ,返回值就是1.可以判断返回值大于1即可.或者等于2也行.

[root@Kylin-V10-sp3 ~]# expr 1+1
1+1
[root@Kylin-V10-sp3 ~]# expr 1 + 1
2
[root@Kylin-V10-sp3 ~]# expr 1 / 1
1
[root@Kylin-V10-sp3 ~]# expr 10 / 2
5
[root@Kylin-V10-sp3 ~]# expr 10 * 2
expr: 语法错误:未预期的参数 “1.py”
[root@Kylin-V10-sp3 ~]# expr 10 \* 2
20
[root@Kylin-V10-sp3 ~]# expr 10 - 2
8
[root@Kylin-V10-sp3 ~]# expr 1 - 1
0
[root@Kylin-V10-sp3 ~]# echo $?
1
[root@Kylin-V10-sp3 ~]# 

5.2.3.1 数字判断

# 思路:
1.输入字符串给变量num(read)
2.检查num 是否为数字 expr
3.检查expr命令返回值即可

read -p "请输入两个数字:" num1 num2
expr $num1 + $num2 >/dev/null 2>&1
# expr结果大于等于2为异常
if [ $? -ge 2 ];then
    echo "$0 $num1 $num2"
else
    echo "输入正确"	
fi

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_num.sh 
请输入两个数字:
check_num.sh  
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_num.sh 10a 20
请输入两个数字:10a 20
check_num.sh 10a 20
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_num.sh 
请输入两个数字:30 10
输入正确

5.2.4 let,$(()), $[]

不支持小数,一般进行简单计算.

let,$(()),$[]
 # let
[root@Kylin-V10-sp3 ~]# a=10
[root@Kylin-V10-sp3 ~]# b=20
[root@Kylin-V10-sp3 ~]# let c=$a + $b
-bash: let: +:语法错误: 需要操作数 (错误符号是 "+")
[root@Kylin-V10-sp3 ~]# let c=$a+$b
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# echo $c
30
[root@Kylin-V10-sp3 ~]# let d=a+b
[root@Kylin-V10-sp3 ~]# echo $d
30
[root@Kylin-V10-sp3 ~]# let c++
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# echo $c
31
[root@Kylin-V10-sp3 ~]# 


# $(())
[root@Kylin-V10-sp3 ~]# e=$((a+b))
[root@Kylin-V10-sp3 ~]# echo $e
30
[root@Kylin-V10-sp3 ~]# 
# 生成随机数(0-99)
[root@Kylin-V10-sp3 ~]# echo $((RANDOM%100))
51
[root@Kylin-V10-sp3 ~]# echo $((RANDOM%100))
14
[root@Kylin-V10-sp3 ~]# echo $((RANDOM%100))
86
[root@Kylin-V10-sp3 ~]# 

#$[]
[root@Kylin-V10-sp3 ~]# f=$[a+b]
[root@Kylin-V10-sp3 ~]# echo $f
30
[root@Kylin-V10-sp3 ~]#

5.3 小结

掌握常用的运算符. && ||

掌握运算命令,符号: awk,bc,expr,let,$(()),$[]

运算的命/符号

说明

应用场景

awk

可以进行计算,带小数,可以与shell脚本进行变量传递

一般计算都可以用awk.

bc

带小数

一般计算都可以用bc.需要安装.

expr

进行计算,整数

一般用于检查输入内容是否为数字(方法之一).

let

进行计算,整数,变量直接使用即可

用于计算i++

$[[]]

进行计算,整数,变量直接使用即可

 
$(())

进行计算,整数,变量直接使用即可

 

6. 逻辑-判断

  • 条件表达式-裸奔版本的判断(最基本)
  • if判断-更加灵活判断
  • case语句-适用于做菜单选择(格式)

6.1 条件表达式

  • 条件表达式属于判断中的核心,if后面都在使用它,也可以和&&,||一起使用.
  • 目标:
    • 熟练掌握条件表达式的格式.
    • 熟练使用条件表达式进行判断(文件,大小,字符串,与或非)

6.1.1 格式

条件表达式也可以叫条件测试语句

面试题-[] [[]]区别

含义与特点

test [ ]

[[ ]] (( )) (小括号)

共同点

都可以用于判断

都可以用于判断

区别1

仅支持普通判断,不支持正则

[[ ]] 普通判断,支持正则

区别2

表示逻辑关系(与或非)符号不同 -a -o ! -gt

[[ ]] && || ! > < <= >=

应用场

大部分情况下使用 [] 进行常见判断

[[ ]] 使用正则的时候使用2对中括号,  (())可以用于运算.

6.1.2 判断文件

条件表达式符号

条件表达式-

说明

-f

file 判断是否存在;判断这个是否为文件,如果是则为真(成立)

-d

dir 判断是否存在;判断这个是否为目录,如果是则为真(成立)

-x

executable 判断是否存在;是否有执行权限

-s

size 判断是否存在;文件大小是否大于0 (是否为空) 非空为真

-r

是否有读权限

-w

是否有写权限

-nt

newer than 两个文件修改时间 是否更加新

-ot

older than 两个文件修改时间 是否更加老

-L/-h

软连接,符号连接 link

-e

是否存在(任何类型文件)

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -d /etc/aaa/ && echo OK || echo failed
failed
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -d /etc/ && echo OK || echo failed
OK
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -f /etc/hosts && echo OK || echo failed
OK
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -f /etc/hosts123 && echo OK || echo failed
failed
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -e /etc/hosts123 && echo OK || echo failed
failed
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -e /etc/ && echo OK || echo failed
OK
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -x /etc/hosts && echo OK || echo failed
failed
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -e /etc/rc.local && echo OK || echo failed
OK
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -x /etc/rc.local && echo OK || echo failed
failed
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# chmod +x /etc/rc.local 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# test -x /etc/rc.local && echo OK || echo failed
OK
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

通过脚本传参方式传输1个参数,判断是否为文件, 是否为目录,是否具有执行权限.

x1=$1

test ${#x1} -eq 0 && echo "请输入参数" && exit 1
test -d $x1 && echo "这是目录" && exit 0
test -L $x1 && echo "这是软连接" && exit 0
test -f $x1 && echo "这是文件" && test -x $x1 && echo "文件有执行权限" ||  echo "文件没有执行权限"

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_file_dir_x.sh /etc
这是目录
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_file_dir_x.sh /etc/hosts
这是文件
文件没有执行权限
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_file_dir_x.sh /etc/rc.local 
这是软连接
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.1.3 对比字符串

用于对比或比较2个字符串内容。

字符串对比的时候加上引号

条件表达式-字符串对比

说明

"str1" = "str2"

str1 是否等于str2,如果相等则为真

"str1" != "str2"

str1 是否等于str2,如果不相等则为真

-z "str"

zero 贼肉 检查str字符串是否为空,空的则为真

-n "str"

not zero 检查str字符串是否为空,非空的则为真。

6.1.3.1 字符串是否相等

[root@Kylin-V10-sp3 ~]# input=start
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# [ "$input" = "startx" ] && echo ok || echo wrong
wrong
[root@Kylin-V10-sp3 ~]# [ "$input" = "start" ] && echo ok || echo wrong
ok
# 企业级小技巧:在进行字符串比较的时候变量尾巴可以加上个x,防止变量为空,造成匹配/执行失败.
[root@Kylin-V10-sp3 ~]# [ "$input"x = "start"x ] && echo ok || echo wrong
ok
[root@Kylin-V10-sp3 ~]# 

6.1.3.2 检查字符串是否为空

[root@Kylin-V10-sp3 ~]# echo $h  # 没有变量h

[root@Kylin-V10-sp3 ~]# [ -z "$input" ] && echo ok || echo wrong
wrong
[root@Kylin-V10-sp3 ~]# [ -n "$input" ] && echo ok || echo wrong
ok
[root@Kylin-V10-sp3 ~]# [ -z "$h" ] && echo ok || echo wrong
ok
[root@Kylin-V10-sp3 ~]# [ -n "$h" ] && echo ok || echo wrong
wrong
[root@Kylin-V10-sp3 ~]#

6.1.3.3 检查指定的服务状态脚本,是否运行,是否开机自启动

service=$1
# 判断参数
test ${#service} -eq 0 && echo "请输入参数" && exit 1

# 判断服务是否存在
ser_count=`systemctl list-unit-files | grep ${service}.service | wc -l`
if [ $ser_count = 0 ];then
    echo "服务不存在"
    exit 1
fi

# 判断状态
active_status=`systemctl is-active ${service}` 
test "$active_status" = "active" && echo $service "服务启动"  || echo $service "未启动"

enabled_status=`systemctl is-enabled ${service}`
test "$enabled_status" = "enabled" && echo $service "服务开机自启" || echo $service "未做开机自启"

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# vim check_server.sh 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_server.sh sshd
sshd 服务启动
sshd 服务开机自启
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_server.sh
请输入参数
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_server.sh nginx
nginx 未启动
nginx 未做开机自启
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.1.3.4 使用read指令的脚本增加判断功能,如果变量为空则退出

使用read的时候 $#无法使用.

-z +read变量

#!/bin/bash
##############################################################
# File Name:check_read_null.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
##############################################################
read -p "请输入数字:" num

[ -z $num ] && {
    echo "请重新输入数字"
    exit 1
}

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_read_null.sh 
请输入数字:123
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_read_null.sh
请输入数字:
请重新输入数字 

6.1.4 比大小(整数)

温馨提示:记忆关键单词

  • -eq equal 等于.
  • -gt great than 大于
  • -lt less than 小于

条件表达式-整数相关

[]

[[ ]]

大于

-gt great than

>

大于等于

-ge great equal

>=

小于

-lt less than

<

小于等于

-le less equal

<=

等于

-eq equal

==

不等于

-ne not equal !=

⚠ 不支持小数的对比,仅支持整数.

   

6.1.4.1 比较大小 []

[root@Kylin-V10-sp3 ~]# [ 666 -gt 1 ] && echo "成立 " || echo "失败"
成立 
[root@Kylin-V10-sp3 ~]# [ 0 -gt -1 ] && echo "成立 " || echo "失败"
成立 
[root@Kylin-V10-sp3 ~]# [ 0 -gt -1000 ] && echo "成立 " || echo "失败"
成立 
[root@Kylin-V10-sp3 ~]# [ 0 -gt 0.5 ] && echo "成立 " || echo "失败"
-bash: [: 0.5:需要整数表达式
失败
[root@Kylin-V10-sp3 ~]#

6.1.4.1 比较大小 [[]]

[root@Kylin-V10-sp3 ~]# [[ 60 > 6 ]] && echo "成立 " || echo "失败"
成立 
[root@Kylin-V10-sp3 ~]# [[ 6 >= 6 ]] && echo "成立 " || echo "失败"
-bash: 条件表达式中有语法错误
-bash: “6”附近有语法错误
[root@Kylin-V10-sp3 ~]# 

#这里面也可以用-gt -lt ........(不推荐使用,对比的时候会有语法问题。)

6.1.5 逻辑盘判断

  • 多个条件表示同时成立,表示或者,表示取反.
  • 与或非.

条件表达式-逻辑判断

[]中的写法 [[ ]]中的写法

与(同时成立)

条件1 -a 条件2 (and) &&

或(只有有个成立的就行)

条件1 -o 条件2 (or) ||

非(取反)

! !

防火墙没有运行 并且 没有开机自启动 输出防火墙关闭

active_status=`systemctl is-active firewalld`
enabled_status=`systemctl is-enabled firewalld`

if [ "$active_status" != "active" -a "$enabled_status" != "enabled" ];then
    echo "防火墙已经完全关闭"
else
    echo "防火墙没有完全关闭"
fi

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_firewalld.sh 
防火墙没有完全关闭
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# systemctl is-active firewalld
active
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# systemctl is-enabled firewalld
enabled
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.1.6 正则怕判断

=~ is match(支持正则)

6.1.6.1 使用正则精确匹配数字

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# num=666
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#  
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# [[ $num =~ ^[0-9]+$ ]] && echo 成功 || echo 失败
成功
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# [[ xk666 =~ ^[0-9]+$ ]] && echo 成功 || echo 失败
失败
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# num2=99.99
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# [[ $num2 =~ ^[0-9]+(\.[0-9]+)?$ ]] && echo 成功 || echo 失败
成功
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#

6.1.6.2 判断输入是整数,浮点数(小数),还是字符

书写一个脚本通过read读取输入,判断输 入是整数,浮点数(小数),还是字符
 #!/bin/bash
##############################################################
# File Name:check_type.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
##############################################################
read -p "请输入一些内容" param

[ -z $param ] && {
    echo "请输入参数"
    exit 1
}

[[ "$param" =~ ^[0-9]+$ ]] && {
    echo 类型为整数
    exit
}

[[ "$param" =~ ^[0-9]+(\.[0-9]+)?$ ]] && echo 类型为小数
[[ "$param" =~ ^[0-9a-zA-Z]+$ ]] && echo 类型为字符串
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash  check_type.sh 
请输入一些内容123
类型为整数
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash  check_type.sh 
请输入一些内容123.456            
类型为小数
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash  check_type.sh 
请输入一些内容shdg34hf
类型为字符串
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.1.6.3 面试题-[] [[]]区别

含义与特

test [ ] [[ ]] (( )) (小括号)

共同点

都可以用于判断 都可以用于判断

区别1

仅支持普通判断,不支持正

[[ ]] 普通判断,支持正则

区别2 与或非

表示逻辑关系(与或非)符号不同 -a -o !

[[ ]] && || !

区别3 比较大小

-eq -ne -gt -ge -lt -le > >= < <=

应用场景

大部分情况下使用 [] 进行常见判断

[[ ]] 使用正则的时候使用2对中括号,(())可以用于运算.

6.1.7 小结

条件表达式分类

必会

熟悉

文件

-f -d -x -s -r -w -nt -ot -L .....

字符串比较

=  !=  === -n -z

比较大小

-eq -ne -gt -ge -lt -le ....

逻辑

-a ! -o  

正则

[[ $num =~ ^[0-9]+ $ ]]  

查询帮助: man test 或 man bash 搜索CONDITIONAL EXPRESSIONS

6.2 if

  • 应用:if一般与条件表达式一起使用,也可以直接加上命令.
  • 目标:
    • if判断适用于更加复杂的判断与检查
    • if判断语句的格式
  • 分类:根据满足/不满足条件后,做什么,可以分类单分支,双分支,多分支.

6.2.1 单分支判断

第1种-单分支

引用场景:与&&或||类似,用于放在脚本开头进行判断,脚本参数数量,输入内容是否符合规则。

单分支判断
 if 条件;then
满足条件后执行的内容。
fi

if 条件
then
满足条件后执行的内容。
fi

[ $# -eq 2 ] || {
echo "必须要2个数字"
exit 1
}

if [ $# -ne 2 ];then
echo "脚本必须要2个参数"
exit 1
fi

6.2.2 双分支判断

if 条件;then
满足条件后执行的内容。
else
不满足条件执行的内容。
fi

if 丁同学条件;then
迎娶白富美,富婆.
else
是个女的就行.
fi

6.2.3 多分支判断

if 条件;then
else
fi
#第1次判断
if 条件;then
满足条件后执行的内容。
#第2次判断
elif 条件;then #else if
满足elif条件,执行的内容。
#第3次判断 还可以继续增加.
elif 条件;then
满足elif条件,执行的内容。
else
不满足条件执行的内容。
fi

6.2.3.1 书写多分支格式比较大小脚本

compare_num.sh
 #!/bin/bash
##############################################################
# File Name:compare_num.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
##############################################################

read -p "请输入两个数:"  num1 num2

[[ ! $num1 =~ ^-?[0-9]+$ ]] && {
    echo "请输入整数" $num1
    exit 1
}

[[ ! $num2 =~ ^-?[0-9]+$ ]] && {
    echo "请输入整数" $num2
    exit 1
}

if [ $num1 -gt $num2 ];then
    echo "$num1 > $num2"
elif [ $num1 -eq $num2 ];then
    echo "$num1 = $num2"
else
    echo "$num1 < $num2"
fi
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash compare_num.sh 
请输入两个数:123 321
123 < 321
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash compare_num.sh 
请输入两个数:-1 -100
-1 > -100
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash compare_num.sh 
请输入两个数:100 100
100 = 100
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.2.3.2 检查磁盘分区的情况

  • 磁盘有几个分区.
  • 检查每个分区空间使用情况,60%警告,70%严重,80%比较严重,90%相当严重,95%灾难
sh check_disk.sh #输出样子
系统一共有4个分区
/分区使用率60%,使用正常
/boot/分区使用率70%,磁盘空间不足
/data/分区使用率80%,磁盘空间不足
xxx分区
  • 流程:
    • 获取系统磁盘分区名字 /etc/fstab 排除空行,注释的行,swap
    • 统计磁盘分区数量 wc -l
    • 取出所有分取名字,通过循环一个分区一个分区处理
      • 获取分区使用率 df -h 分区名字 取出大小,使用率
      • 对使用率进行判断
        • 大于等于70 磁盘空间不足
        • 小于70 磁盘空间正常

 

6.2.4 小结

  • 通过if完成更为复杂判断。
  • if判断可以使用条件(条件表达式),写命令。
  • if [] 条件表达式(测试语句)
  • if 命令 ==执行命令 $? -eq 0
if ! id $user &>/dev/null ;then
echo "用户不存在"
exit 2
fi
id $user &>/dev/null
if [ $? -ne 0 ] ;then
echo "用户不存在"
exit 2
fi
if ping -c baidu.com &>/dev/null ;then
echo "百度通畅的"
fi
ping -c baidu.com &>/dev/null
if [ $? -eq 0 ] ;then
echo "百度通畅的"
fi

6.3 case

6.3.1 概述

  • 相当于是if中的字符串对比判断. (= !=) .比大小,文件,目录判断,正则只能使用if.
  • 类似于条件分支语句,case一般用于实现有多种选择的脚本(菜单选择)。
  • 这个功能:if或多分支if实现,如果使用case语句会更加清晰直观.
  • 菜单。
    • start|stop|restart|status
    • 手写堡垒机.
    • 环境部署脚本

case语句vs if多分支

  • case 一般用于固定的菜单选择情况.运行脚本用户输入1,2,3,4.start|stop|restart....
  • if 可以用于一些范围的比较.

6.3.1 格式与实战

6.3.1.1 case格式

case "变量" in
    1)
        命令
        ;;
    2)
        命令
        ;;
    *)
        命令(保底的默认输出)
esac

6.3.1.2 菜单展示

case_menu
 #!/bin/bash
##############################################################
# File Name:case_test.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
##############################################################

cat <<EOF
1 关机
2 重启
3 查看状态
EOF

read -p "请输入需求:" num

case $num in
    1) echo 即将关机,请稍等;;
    2) echo 即将重启;;
    3) echo 正在查看状态,请稍后;;
    *) echo 该服务暂时为开放
esac
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash case_test.sh 
1 关机
2 重启
3 查看状态
请输入需求:1
即将关机,请稍等
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash case_test.sh 
1 关机
2 重启
3 查看状态
请输入需求:6
该服务暂时为开放
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.3.1.3 判断用户输入的是yes还是no.

用户输入yes,y,Y,Yes 都表示yes

用户输入no,n,N,No 都表示no

#!/bin/bash

read -p "是否确认,输入yes or no :" y_n

case "$y_n" in
    YES|yes|Y|y)  echo "yes" ;;
      NO|no|N|n)  echo "no" ;;
              *)
		  echo "error"
		  exit 1
esac

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash case_yes_no.sh 
是否确认,输入yes or no :y
yes
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash case_yes_no.sh 
是否确认,输入yes or no :n
no

6.3.1.2 判断系统发行版本

判断当前系统是kylin,ubuntu,centos,debian,xxxxx

系统是kylin或centos则输出红帽类系统,使用yum,rpm指令.

系统是debian或ubuntu则输出debian类系统,使用apt,dpkg指令.

核心问题:如何知晓当前系统发行版本和版本号

  1. 1. hostnamectl的Operating System:行的第3列 获取系统发行版本,但是版本号有问题.
  1. 2. 读取/etc/os-release文件 读取ID,VERSION_ID2个内容
#!/bin/bash
read -p "是否确认,输入yes or no :" y_n

case "$y_n" in
    YES|yes|Y|y)  echo "yes" ;;
      NO|no|N|n)  echo "no" ;;
              *)
		  echo "error"
		  exit 1
esac
 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_os.sh 
红帽类系统:kylin,版本:V10
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

6.3.1 case小结

  • case与if类似. case中*(所有),|(或者).
  • case应用场景,用于实现菜单选择功能,字符串(固定)对比.
  • if+elif适用于数字或灵活场景.
  • 进阶格式:
    • 分支中可以使用|表示或者
    • *号表示所有

6.4 判断小结

  • 条件表达式格式: [] [[]] test , (())
  • 判断文件,字符串,大小,逻辑,正则
  • if判断:
    • 单分支。
    • 双分支。
    • 多分支。
  • case语句: 用户输入与不同的选择,相对固定的选择.
  • 完成案例:比大小,输出指定用户信息,服务管理脚本(优化)。

 

posted @ 2024-09-24 21:48  老虎死了还有狼  阅读(6)  评论(0编辑  收藏  举报