学习内容:
《鸟哥Linux》12章:学习shell脚本
学习过程:
12.2简单的shell脚本练习
12.2.1简单范例
- read命令
read -p #提示信息
read -t #录入时间
- date命令
date --date='1 days ago' +%Y%m%d
- 判断文件名fileuser是否为空,如果为空,设置默认文件名“filename”
filename=${fileuser:-"filename"}
- 数值运算
echo (( 13%3 )) # var=$((运算内容))
echo "123.123*55.9" | bc #bc命令
12.2.2脚本的执行方式差异(待补充)
- source script
- sh script
- ./script
12.3善用判断式
12.3.1利用test命令的测试功能
- test命令
条件判断,符合返回0,不符合返回其他
[root@centos7-4G ~]# test -e ./zhai && echo "exit" || echo "Not exist"
exit
test命令 | |
---|---|
文件名【文件类型】判断 | |
-e | 是否存在 |
-f | 是否为文件(file) |
-d | 是否为目录(directory) |
多重提案件判定 | |
-a | (and) |
-o | (or) |
! | 反向状态 |
12.3.2 利用判断符号[]
注意:中括号的两端需要有空格符来分隔,【==】两端需要空格分隔
- 中括号[]内的每个组件都需要有空格来分隔
- 在中括号内的变量,最好都以双引号括号起来
- 在中括号内的常数,最好都以单或者双引号括号起来
12.3.3 shell脚本的默认变量($0 、 $1…)
默认变量 | |
---|---|
$0 | 脚本名 |
$1 | 第一个参数 |
$# | 参数个数 |
$@ | 代表【“$1” “$2” “$3”】,每个变量是独立的 |
$* | 代表【“$1c$2c$3”】,其中c为分隔符,默认为空格,如 【“$1 $2 $3”】 |
- shift:造成参数变量号码的偏移
shift代表拿掉最前面几个参数
12.4条件判断式
12.4.1 利用if…then
#语法1
if [ 条件判断式 ] ; then
dosomethings
fi
#语法2
if [ 条件判断式 ] ; then
dosomethings
else
dosomethings2
fi
#语法3
if [ 条件判断式1 ] ; then
dosomethings
elif [ 条件判断式2 ] ; then
dosomethings2
else
dosomethings3
fi
例程1:查看80:WWW,22:SSH服务是否开启
#!bin/bash
#查看80:WWW,22:SSH服务是否开启
#提示信息
echo "detect server's services"
echo -e "detect www,ftp,ssh,mail.\n"
#重定向
testfile=/dev/shm/netstat/checking.txt
netstat -tuln > ${testfile}
testing=$(grep ":80 " ${testfile})
if [ "${testing}" != "" ] ; then
echo "WWW is running in system."
fi
testing=$(grep ":22 " ${testfile})
if [ "${testing}" != "" ] ; then
echo "ssh is running in system."
fi
例程2:入伍日期
12.4.2 利用case…esac判断
case…in…esac语法:
case $变量名称 in
"第一个变量") #变量建议用双引号括起来,,关键字则为右圆括号
dosomethings
;; #每个类型结尾用两个连续的分号处理
"第二个变量")
dosomethings
;;
*) #最后一个变量内容用*表示所有其他值
dosomethings
exit 1
;;
esac
例程:
#!/bin/bash
case $1 in
"one")
echo "your choice is one"
;;
"two")
echo "your choice is one"
;;
*)
echo "Usage ${0} {one|two}"
exit 1
;;
esac
运行结果:
[root@centos7-4G ~]# sh show_num.sh one
your choice is one
[root@centos7-4G ~]# sh show_num.sh three
Usage show_num.sh {one|two}
12.4.3 利用function功能
语法:
function fname() {
dosomething
}
注意:shell脚本从上往下运行,设置function一定要在程序的最前面
function也拥有内置变量,例程:
#!/bin/bash
#show_num.sh
#根据输入参数显示数字
function printit(){
echo "Your choice is ${1}"
}
case ${1} in
"one")
pirntit 1
;;
"two")
printit 2
;;
*)
echo "Usage ${0} {one|two}"
;;
esac
学习时间:
2022/10/11