Day02-SHELL自动化编程-运算与判断
8. Shell编程必知必会的运算
-
目标:通过shell脚本+awk和其他方式,实现在脚本中进行统计与计算
-
主要内容:
- 运算符
- 运算的命令和符号
8.1 运算符
shell-运算符 | 含义 |
---|---|
+ | 加法符号 |
- | 减法符号 |
* | 乘法符号 |
/ | 除法符号 |
% | 取余 |
^或** 幂、指数 | 2^10=1024 10个2相乘 |
i=i+1 i++ | 计数,计算次数 |
j=j+?? j+=?? | 求和,累加 |
&& | 并且,前一个命令执行成功,再执行后面的命令(判断) |
|| | 或者,前一个命令执行失败了,再执行后面的命令(判断) |
- % 生成指定范围的随机数
随机的数字(n)对一个数字取余可以得到0到n-1范围的随机数。
echo $RANDOM%5 |bc
- &&
检查目录是否存在
ls /etc && echo 目录存在
- ||
目录不存在则创建
ls /data || mkdir -p /data
8.2 运算方法
运算的命令/符号 | 说明 | 应用场景 |
---|---|---|
awk | 可以进行计算,带小数,可以与shell脚本进行变量传递 | 一般计算都可以用awk |
bc | 带小数 | 一般计算都可以用bc,需要安装 |
expr | 进行计算,整数 | 一般用于检查输入内容是否为数字(方法之一) |
let | 进行计算,整数,变量直接使用即可 | 用于计算i++ |
$(()) | 进行计算,整数,变量直接使用即可 | |
$[ ] | 进行计算,整数,变量直接使用即可 |
8.2.1 awk进行计算
- 基础用法
[root@m01 ~]# awk '{print 1/3}'
0.333333
0.333333
^C
[root@m01 ~]# awk 'BEGIN{print 1/3}'
0.333333
[root@m01 ~]# awk 'BEGIN{print 2^10}'
1024
[root@m01 ~]# awk 'BEGIN{print 2^9}'
512
- 在awk中使用shell变量。
awk -vn1=1 -vn2=3 'BEGIN{print n1/n2}'
0.333333
awk -v选项用于创建或修改awk中的变量。 -v是shell脚本与awk桥梁
在awk中各种变量直接使用即可,不要加上$n1,如果加上了会被awk识别为取列
8.2.2 bc
- 基本用法即可. -l显示小数
echo 1/3 |bc -l
echo 2^10 |bc -l
8.2.3 expr
- 使用注意事项:使用空格,对*号转义
[root@m01 ~]# expr 1+1
1+1
[root@m01 ~]# expr 1 + 1
2
[root@m01 ~]# expr 1 * 1
expr: 语法错误
[root@m01 ~]# expr 2 \* 2
4
[root@m01 ~]# expr 2 - 2
0
[root@m01 ~]# expr 2 / 2
1
- 小坑:了解:计算0 + 0 查看命令的返回值。
expr 进行计算的时候结果为0 ,返回值就是1
未来通过其他方法检查是否为数字.
[root@m01 ~]# expr 1 + 1
2
[root@m01 ~]# echo $?
0
[root@m01 ~]# expr 0 + 0
0
[root@m01 ~]# echo $?
1
[root@m01 ~]# expr 0 + 0 + 666
666
[root@m01 ~]# echo $?
0
案例10:对输入的内容检查是否为数字
- 思路:
- 输入字符串给变量num
- 检查num 是否为数字 expr
- 检查返回值即可
[root@m01 devops-shell]# cat 10-check_num.sh
#!/bin/bash
##############################################################
# File Name:10-check_num.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
read -p "请输入任意信息:" str
#2.检查
expr "$str" + 666 &>/dev/null
#3.检查结果
if [ $? -eq 0 ];then
echo "$str 是数字"
else
echo "$str 不是数字"
fi
if [ $str = -666 ];then
echo "恭喜触发隐藏功能,获得1次穿越机会"
fi
[root@m01 devops-shell]# sh 10-check_num.sh
请输入任意信息:6
6 是数字
[root@m01 devops-shell]# sh 10-check_num.sh
请输入任意信息:0
0 是数字
[root@m01 devops-shell]# sh 10-check_num.sh
请输入任意信息:lidao
lidao 不是数字
[root@m01 devops-shell]# sh 10-check_num.sh
请输入任意信息:-666
-666 不是数字
恭喜触发隐藏功能,获得1次穿越机会
8.2.4 let,$(()),$[]
- let
[root@m01 devops-shell]# n1=66
[root@m01 devops-shell]# n2=99
[root@m01 devops-shell]# let c=n1+n2
[root@m01 devops-shell]# echo $c
165
[root@m01 devops-shell]# i=1
[root@m01 devops-shell]# let i++
[root@m01 devops-shell]# echo $i
2
[root@m01 devops-shell]# let i++
[root@m01 devops-shell]# echo $i
3
- $(())
n1=666
n2=999
echo $((n1+n2))
1665
d=$((n1+n2)) 这是用法
echo $d
1665
- $[]
n1=666
n2=999
e=$[n1+n2]
echo $e
1665
8.3 案例
案例11:计算器,传入脚本中2个参数,进行计算,输出结果。(传参)
- 要求
sh 11.num_calc.sh 10 20
计算10-20:结果
计算10+20:结果
计算10*20:结果
计算10/20:结果
- 流程
- 用户传入2个参数
- 判断是否为数字,如果不是,显示提示信息然后脚本结束.
增加个判断脚本参数个数是2.(这个判断与上面的重复,可以省略) - 进行计算,输出结果(awk)
[root@m01 devops-shell]# cat 11-clc_v1.sh
#!/bin/bash
##############################################################
# File Name:11-clc_v1.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
num1=$1
num2=$2
#2.判断是否为数字
expr "$num1" + "$num2" + 666 &>/dev/null
if [ $? -ne 0 ];then
echo "Usage: $0 数字1 数字2"
echo "请输入数字"
exit 1
fi
#3.计算
plus=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1+n2 }'`
min=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1-n2 }'`
cheng=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1*n2 }'`
chu=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1/n2 }'`
#4.输出
cat<<EOF
计算$num1 + $num2=$plus
计算$num1 - $num2=$min
计算$num1 * $num2=$cheng
计算$num1 / $num2=$chu
EOF
[root@m01 devops-shell]# sh 11-clc_v1.sh a b
Usage: 11-clc_v1.sh 数字1 数字2
请输入数字
[root@m01 devops-shell]# sh 11-clc_v1.sh a 6
Usage: 11-clc_v1.sh 数字1 数字2
请输入数字
oot@m01 devops-shell]# sh 11-clc_v1.sh 2 3
计算2 + 3=5
计算2 - 3=-1
计算2 * 3=6
计算2 / 3=0.666667
案例12:计算器,传入脚本中2个参数,进行计算,输出结果。(read)
[root@m01 devops-shell]# vim 14-clc_v3.sh
#!/bin/bash
##############################################################
# File Name:14-clc_v3.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
#num1=$1
#num2=$2
read -p "请输入数字:num1 num2 " num1 num2
#2.判断是否为数字
#判断小数正则^-?[0-9]+\.?[0-9]+$
[[ $num1 =~ ^-?[0-9]+$ ]] || {
echo "$num1 必须是数字"
exit 1
}
[[ $num2 =~ ^-?[0-9]+$ ]] || {
echo "$num2 必须是数字"
exit 1
}
#3.计算
plus=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1+n2 }'`
min=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1-n2 }'`
cheng=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1*n2 }'`
chu=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1/n2 }'`
#4.输出
cat<<EOF
计算$num1 + $num2=$plus
"14-clc_v3.sh" 40L, 894C 已写入
[root@m01 devops-shell]# sh 14-clc_v3.sh
请输入数字:num1 num2 12 4
计算12 + 4=16
计算12 - 4=8
计算12 * 4=48
计算12 / 4=3
8.4 小结
- 掌握常用的运算符 && ||
- 掌握运算命令,符号:awk,bc,expr,let,$(()),$[ ]
- 完成案例
- 判断是否为数字,如果不是数字退出脚本exit 1
- 计算器-传参
- 计算器-read
9. Shell编程-加点逻辑-判断
- 条件表达式-裸奔版本的判断(最基本)
- if判断-更加灵活判断
- case语句-适用于做选择
9.1 条件表达式
- 条件表达式属于判断中的核心,if后面都在使用它.
- 目标:
- 熟练掌握条件表达式的格式.
- 熟练使用条件表达式进行判断(文件,大小,与或非)
9.1.1 格式
- 条件表达式也可以叫条件测试语句
案例13-面试题-[] [[]]区别
含义与特点 | test 或 [ ] | [[ ]] 或 (( )) (小括号) |
---|---|---|
共同点 | 都可以用于判断 | 都可以用于判断 |
区别1 | 仅支持普通判断,不支持正则 | [[ ]] 普通判断,支持正则 |
区别2 | 表示逻辑关系(与或非)符号不同 -a -o ! -gt | [[ ]] && || ! > < <= >= |
应用场景 | 大部分情况下使用 [] 进行常见判断 | [[ ]] 使用正则的时候使用2对中括号,(())可以用于运算 |
9.1.2 判断文件
- 条件表达式符号
条件表达式-文件 | 说明 |
---|---|
-f | file 判断是否存在,判断这个是否为文件,如果是则为真(成立) |
-d | dir 判断是否存在,判断这个是否为目录,如果是则为真(成立) |
-x | executable 判断是否存在,是否有执行权限 |
-s | size 判断是否存在,文件大小是否大于0 (是否为空) 非空为真 |
-r | 是否有读权限 |
-w | 是否有写权限 |
-nt | newer than 两个文件修改时间 是否更加新 |
-ot | older than 两个文件修改时间 是否更加老 |
-L | 软连接 |
-e | 是否存在(任何类型文件) |
- 检查指定的文件是否存在
1. 条件测试语句,不会直接提示对错,通过返回值提示.
[ -f /etc/hosts ]
echo $?
2. 判断文件是否存在格式
[ -f /etc/hosts ] && echo "成立 " || echo "失败"
[ -f /etchosts ] && echo "成立 " || echo "失败"
test -f /etchosts && echo "成立 " || echo "失败"
注意格式:[空格 -f /etc/hosts 空格]
- 检查目录是否存在
[ -d /etc/ ] && echo "成立 " || echo "失败"
成立
[ -d /etc/hosts ] && echo "成立 " || echo "失败"
失败
温馨提示:执行流程
&& 表示前面命令执行成功然后执行echo 成立。
|| 表示前面命令执行失败了,echo 失败
- -x判断是否有执行权限
检查/etc/rc.d/rc.local是否有执行权限.
[ -x /etc/rc.d/rc.local ] && echo "成立 " || echo "失败"
失败
ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 473 10月 2 2020
/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
[ -x /etc/rc.d/rc.local ] && echo "成立 " || echo "失败"
成立
- -x的系统脚本的使用案例
[ -x /sbin/ip ] || exit 1
ip命令是否有执行权限,如果没有则退出。
可以看/etc/init.d/network
- -s检查文件内容是否为空,非空则为真
[ -s /etc/hosts ] && echo "成立 " || echo "失败"
成立
touch lidao996.txt
ll lidao996.txt
-rw-r--r-- 1 root root 0 6月 18 09:21 lidao996.txt
[ -s lidao996.txt ] && echo "成立 " || echo "失败"
失败
9.1.3 对比字符串
- 用于对比或比较2个字符串内容
条件表达式-字符串对比 | 说明 |
---|---|
“str1” = “str2” | str1是否等于str2,如果相等则为真 |
“str1” != “str2” | str1是否等于str2,如果不相等则为真 |
-z “str” | zero 检查str字符串是否为空,空的则为真。 |
-n “str” | not zero 检查str字符串是否为空,非空的则为真 |
- 对比2个字符串是否相等
input=start
[ "$input" = "start" ] && echo "成立 " || echo "失败"
成立
str1=lidao996
str2=lidao007
[ "$str1" = "$str2" ] && echo "成立 " || echo "失败"
失败
[ “$UID” ≠ “0” ] && exit 4 #判断是否为root执行
企业级小技巧:
在进行字符串比较的时候变量尾巴可以加上个x,防止变量为空,造成匹配/执行失败.
[root@oldboy-devops-shell ~]# [ "${str1}x" = "${str2}x" ] && echo "成立 " || echo "失败" 失败 [root@oldboy-devops-shell ~]# [ "$str1"x = "$str2"x ] && echo "成立 " || echo "失败" 失败
- 检查字符串是否为空
unset str2
echo $str2 这个变量是空的
[ -z "$str2" ] && echo "成立 " || echo "失败"
成立
[ -n "$str2" ] && echo "成立 " || echo "失败"
失败
9.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 | != |
不支持小数的对比,仅支持整数 |
- 比较大小 []
[ 666 -gt 1 ] && echo "成立 " || echo "失败"
成立
[ 0 -gt -1 ] && echo "成立 " || echo "失败"
成立
[ 0 -gt -1000 ] && echo "成立 " || echo "失败"
成立
[ 0 -gt 0.5 ] && echo "成立 " || echo "失败"
-bash: [: 0.5: 期待整数表达式
失败
- 比较大小[[]]
[[ 60 > 6 ]] && echo "成立 " || echo "失败"
成立
[[ 6 >= 6 ]] && echo "成立 " || echo "失败"
-bash: 条件表达式中有语法错误
-bash: `6' 附近有语法错误
不推荐使用,对比的时候会有语法问题。
这里面也可以用-gt -lt ........
9.1.5 逻辑判断
-
多个条件表示同时成立,表示或者,表示取反.
-
与或非
条件表达式-逻辑判断 | [] | [[ ]] |
---|---|---|
与(同时成立) | 条件1 -a 条件2 (and) | && |
或(只有有个成立的就行) | 条件1 -o 条件2 (or) | || |
非(取反) | ! | ! |
- 王L同学找女朋友要求女的,人是中国的
-a 同时成立
sex=nv
state=china
[ "$sex" = "nv" -a "$guo" = "china" ] && echo 肯定能成 || echo 不一定,还需努力
肯定能成
guo=world
[ "$sex" = "nv" -a "$guo" = "china" ] && echo 肯定能成 || echo 不一定,还需努力
不一定,还需努力
-o 或者
echo $sex $guo
nv world
[ "$sex" = "nv" -o "$guo" = "china" ] && echo 肯定能成 || echo 不一定,还需努力
肯定能成
9.1.6 使用正则判断
- 初步使用正则匹配
num=666
[[ $num =~ [0-9] ]] && echo 成立 || echo 失败
成立
num=lidao996
[[ $num =~ [0-9] ]] && echo 成立 || echo 失败
成立 目前的正则,仅仅表示变量中只要有数字就行(包含
案例:使用正则精确匹配数字
[[ $num =~ ^[0-9]+$ ]] && echo 成立 || echo 失败
失败 变量的值 开头结尾中间全是数字 连续数字
num=666
[[ $num =~ ^[0-9]+$ ]] && echo 成立 || echo 失败
成立
案例14:优化之前的计算器脚本,加入正则判断参数是否为数字
[root@m01 devops-shell]# cat 14-clc_v2.sh
#!/bin/bash
##############################################################
# File Name:14-clc_v2.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
num1=$1
num2=$2
#2.判断是否为数字
#判断小数正则^-?[0-9]+\.?[0-9]+$
[[ $num1 =~ ^-?[0-9]+$ ]] || {
echo "$num1 必须是数字"
exit 1
}
[[ $num2 =~ ^-?[0-9]+$ ]] || {
echo "$num2 必须是数字"
exit 1
}
#3.计算
plus=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1+n2 }'`
min=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1-n2 }'`
cheng=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1*n2 }'`
chu=`awk -vn1=$num1 -vn2=$num2 'BEGIN{ print n1/n2 }'`
#4.输出
cat<<EOF
计算$num1 + $num2=$plus
计算$num1 - $num2=$min
计算$num1 * $num2=$cheng
计算$num1 / $num2=$chu
EOF
[root@m01 devops-shell]# sh 14-clc_v2.sh 4 li
li 必须是数字
[root@m01 devops-shell]# sh 14-clc_v2.sh 4 5
计算4 + 5=9
计算4 - 5=-1
计算4 * 5=20
计算4 / 5=0.8
[root@m01 devops-shell]# sh 14-clc_v2.sh 4 -5
计算4 + -5=-1
计算4 - -5=9
计算4 * -5=-20
计算4 / -5=-0.8
支持负数的正则 "\$num1" =~ ^-?[0-9]+$
判断小数正则 ^-?[0-9]+\.?[0-9]+$
9.1.7 条件表达式小结
面试题:[] [[ ]]区别
条件表达式分类 | 必会 | 熟悉 |
---|---|---|
文件 | -f -d -x -s | -r -w -nt -ot -L … |
字符串比较 | = != == | -n -z |
比较大小 | -eq -ne -gt -ge -lt -le | … |
逻辑 | -a ! -o | |
正则 | [[ n u m = [ 0 − 9 ] + num =~ ^[0-9]+ num= [0−9]+ ]] |
9.2 if
-
应用:if一般与条件表达式一起使用,也可以直接加上命令
-
目标:
- if判断适用于更加复杂的判断与检查
- if判断语句的格式
-
分类:根据满足/不满足条件后,做什么,可以分类单分支,双分支,多分支
9.2.1 单分支判断
- 第1种-单分支
引用场景:与&&或||类似,用于放在脚本开头进行判断,脚本参数数量,输入内容是否符合规则
if 条件;then
满足条件后执行的内容。
fi
if 条件
then
满足条件后执行的内容。
fi
温馨提示: 这种形式类似于&&或||形式。
案例-如果脚本参数个数不是2,则提示错误提示
[ $# -eq 2 ] || {
echo "必须要2个数字"
exit 1
}
if [ $# -ne 2 ];then
echo "脚本必须要2个参数"
exit 1
fi
9.2.2 双分支判断
if 条件;then
满足条件后执行的内容。
else
不满足条件执行的内容。
fi
if 丁同学条件;then
迎娶白富美,富婆.
else
是个女的就行.
fi
案例14:检查根分区磁盘空间使用率
-
如果大于等于80%提示磁盘空间不足.
-
否则提示磁盘空间正常.
-
分析步骤:
- 取出根分区,磁盘空间使用率。(不带百分号)
- 进行判断
- 大于等于80%
- 否则
[root@m01 devops-shell]# cat 15-disk-check.sh
#!/bin/bash
##############################################################
# File Name:15-disk-check.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
error=4
root_usage=`df -h | grep -w '/' | awk -F '[ %]+' '{print $(NF-1)}'`
#2.if
if [ $root_usage -ge $error ];then
echo "磁盘空间不足,请尽快处理"
else
echo "磁盘空间正常"
fi
[root@m01 devops-shell]# sh 15-disk-check.sh
磁盘空间不足,请尽快处理
[root@m01 devops-shell]# sh -x 15-disk-check.sh
+ error=4
++ grep -w /
++ df -h
++ awk -F '[ %]+' '{print $(NF-1)}'
+ root_usage=7
+ '[' 7 -ge 4 ']'
+ echo 磁盘空间不足,请尽快处理
磁盘空间不足,请尽快处理
[root@m01 devops-shell]# sh 15-disk-check.sh
磁盘空间正常
[root@m01 devops-shell]# sh -x 15-disk-check.sh
+ error=80
++ awk -F '[ %]+' '{print $(NF-1)}'
++ grep -w /
++ df -h
+ root_usage=7
+ '[' 7 -ge 80 ']'
+ echo 磁盘空间正常
磁盘空间正常
9.2.3 多分支判断
if 条件;then
满足条件后执行的内容。
elif 条件;then #else if
满足elif条件,执行的内容。
elif 条件;then
满足elif条件,执行的内容。
else
不满足条件执行的内容。
fi
案例16-比大小的改为,多分支格式。
… 与13案例一致
[root@m01 devops-shell]# cat 16-compare_num.sh
#!/bin/bash
##############################################################
# File Name:16-compare_num.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
read -p "请输入数字:num1 num2 " num1 num2
#2.检查是否为数字
[[ $num1 =~ ^-?[0-9]+$ ]] || {
echo "$num1 必须是数字"
exit 1
}
[[ $num2 =~ ^-?[0-9]+$ ]] || {
echo "$num2 必须是数字"
exit 1
}
#3.进行比较
if [ $num1 -eq $num2 ];then
echo "$num1 == $num2"
elif [ $num1 -gt $num2 ];then
echo "$num1 > $num2"
else
echo "$num1 < $num2"
fi
[root@m01 devops-shell]# sh 16-compare_num.sh
请输入数字:num1 num2 10 11
10 < 11
[root@m01 devops-shell]# sh 16-compare_num.sh
请输入数字:num1 num2 lidao 2
lidao 必须是数字
[root@m01 devops-shell]# sh 16-compare_num.sh
请输入数字:num1 num2 1 1
1 == 1
案例17-输出指定用户的信息
温馨提示:这个脚本未来可以用于做安全检查。
- 检查
- 是否输入了用户名。
- 这个用户是否存在,如果不存在则退出,提示用户不存在。
- 如果用户存在则输出下面的信息:
- 是否可以登录
- 用户uid,gid
- 用户家目录
- 最近1次登录情况。
步骤:
- 执行脚本输入用户名(参数/read)
- 判断用户是否存在,如果不存在则提示用户不存在,退出脚本.
- 如果用户存在输出用户的信息.
- 是否可以登录(命令解释器)
- uid,gid(过滤)
- 用户家目录
- 最近1次登录情况
[root@m01 devops-shell]# cat 17-check_user.sh
#!/bin/bash
##############################################################
# File Name:17-check_user.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
user=${1:-root}
#2.检查用户是否存在
id $user &>/dev/null
[ $? -ne 0 ] && {
echo "用户不存在"
exit 1
}
#3.获取用户信息
user_shell=`grep "^${user}:" /etc/passwd | awk -F: '{print $NF}'`
if [ "$user_shell" = "/bin/bash" ];then
user_login="可以登录"
else
user_login="不可以登录"
fi
user_uid=`grep "^${user}:" /etc/passwd | awk -F: '{print $3}'`
user_gid=`grep "^${user}:" /etc/passwd | awk -F: '{print $4}'`
user_homedir=`grep "^${user}:" /etc/passwd | awk -F: '{print $(NF-1)}'`
user_lastlog=`lastlog | grep -w "${user}"`
#4.输出用户信息
echo "##############################################"
echo "####用户名:${user}"
echo "####用户uid:${user_uid}"
echo "####用户gid:${user_gid}"
echo "####用户是否可以登录:${user_login}"
echo "####用户家目录:${user_homedir}"
echo "####用户最后一次登录情况:${user_lastlog}"
echo "##############################################"
[root@m01 devops-shell]# sh 17-check_user.sh
##############################################
####用户名:root
####用户uid:0
####用户gid:0
####用户是否可以登录:可以登录
####用户家目录:/root
####用户最后一次登录情况:root pts/1 10.0.0.1 一 4月 8 11:16:01 +0800 2024
##############################################
[root@m01 devops-shell]# sh 17-check_user.sh oldboy
##############################################
####用户名:oldboy
####用户uid:1000
####用户gid:1000
####用户是否可以登录:可以登录
####用户家目录:/home/oldboy
####用户最后一次登录情况:oldboy **从未登录过**
##############################################
[root@m01 devops-shell]# sh 17-check_user.sh lidao996
用户不存在
9.2.4 小结
-
通过if完成更为复杂判断。
-
if判断可以使用条件(条件表达式),写命令。
今日总结
-
shell脚本中如何进行计算.awk,bc,expr,let
-
shell脚本中的判断
- 条件表达式: []
- if判断