首页 > 系统相关 >shell编程三

shell编程三

时间:2024-09-24 21:46:13浏览次数:1  
标签:shell Kylin V10 sp3 echo server root 编程

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 $s{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]# [[ $num =~ ^[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语句: 用户输入与不同的选择,相对固定的选择.
  • 完成案例:比大小,输出指定用户信息,服务管理脚本(优化)。

 

标签:shell,Kylin,V10,sp3,echo,server,root,编程
From: https://www.cnblogs.com/daofaziran/p/18429552

相关文章

  • 【Linux】快速上手shell脚本(适合初学者)
    Shell脚本快速上手什么是Shell脚本?Shell脚本是一种通过命令行界面执行的一系列命令的文本文件,主要用于自动化任务。创建Shell脚本使用文本编辑器(如nano或vim)创建一个以.sh结尾的文件:nanomyscript.sh脚本头部在脚本的第一行指定解释器:#!/bin/bash基本命令ec......
  • Microsoft 365 消息速递:Microsoft 365 PnP Management Shell注册变化
    51CTOBlog地址:https://blog.51cto.com/u_13969817PnPPowerShell和CLIforMicrosoft365是社区提供的开源工具,很多Office365Admin习惯性使用脚本执行一些配置和管理策略的应用,使用名为PnPManagementShell的多租户应用程序注册来授予脚本所需的权限,然而,这个多租户应用程序注册......
  • 2024 天池云原生编程挑战赛决赛名单出炉,冠军来自中山大学、昆仑数智战队
    9月20日,2024天池云原生编程挑战赛决赛答辩完美落幕,12支进入决赛的团队用精彩的答辩,为历时3个月的大赛画下了圆满的句号。其中,来自中山大学的陈泓仰以及来自昆仑数智的冉旭欣、沈鑫糠、武鹏鹏,以出色的方案、创新的优化思路、过硬的技术实力分获赛道一和赛道二的冠军。赛道一......
  • 2024 天池云原生编程挑战赛决赛名单出炉,冠军来自中山大学、昆仑数智战队
    9月20日,2024天池云原生编程挑战赛决赛答辩完美落幕,12支进入决赛的团队用精彩的答辩,为历时3个月的大赛画下了圆满的句号。其中,来自中山大学的陈泓仰以及来自昆仑数智的冉旭欣、沈鑫糠、武鹏鹏,以出色的方案、创新的优化思路、过硬的技术实力分获赛道一和赛道二的冠军。赛道......
  • Windows内核编程基础(1)
    在前面的文章中,介绍了如何配置开发环境以及如何进行调试。接下来的几篇文章,将会重点介绍内核编程中所需要了解的一些理论基础。我写这个系列文章的主要目的是方便以后自己查阅,同时也给正在学习内核开发的小伙伴一些参考,所以我会尽可能地以最简单的方式进行描述。如果在阅读......
  • 父子Shell你了解多少?一起解读吧
    一.source和点、bash\sh、./script区别1.source和点,执行脚本,只在当前shell环境中执行生效2.指定bash\sh解释器运行脚本,是开启subshell,开启子shell运行脚本 命令3../script,都会指定shebang,通过解释器运行,也是开启subshell运行命令 二.父Shell的概念pstree|--s......
  • WIP在编程中的意思是什么?
    在编程和软件开发中,WIP是"WorkInProgress"的缩写,表示某个任务、功能或项目正在进行中,尚未完成。WIP通常用于以下几个场景:代码注释:在代码中,开发者可能会使用WIP作为注释,表示某部分代码还在开发中,尚未完成或需要进一步完善。#WIP:这部分代码还需要进一步测试和优化de......
  • 【Java】并发编程的艺术:悲观锁、乐观锁与死锁管理
    目录一、乐观锁和悲观锁二、ReadWriteLock三、StampedLock四、Semaphore五、死锁的条件六、如何发现死锁七、如何避免死锁一、乐观锁和悲观锁        悲观锁(PessimisticLocking)具有强烈的独占和排他特性。它指的是对数据被外界修改持保守态度。因此,在整......
  • 在 PowerShell 中,有多个命令与 IPv6 相关。以下是一些常用的命令和 cmdlet: 管理和配置
    在PowerShell中,有多个命令与IPv6相关。以下是一些常用的命令和cmdlet:获取网络适配器的IPv6地址:powershellCopyCodeGet-NetIPAddress-AddressFamilyIPv6查看所有网络适配器信息:powershellCopyCodeGet-NetAdapter查看特定网络适配器的IPv6地址:powershell......
  • Python函数艺术:掌握编程中的“乐高积木”
    引言函数是程序设计的基本单元之一,它使得代码模块化,提高了重用性和可读性。无论是处理数据、操作文件还是实现特定业务逻辑,掌握好函数的设计与使用都是至关重要的技能。在Python中,定义一个函数非常直观且强大,这使得即使是初学者也能快速上手,并随着经验积累不断发掘其深层价......