上文 https://blog.csdn.net/weixin_44284599/article/details/104662683
6. 条件判断
6.1基本语法
[ condition ](注意 condition 前后要有空格) #非空返回 true,可使用$?验证(0 为 true,>1 为 false)
[ atguigu ] 返回true
[] 返回false
6.2常用判断条件
1)两个整数的比较
= 字符串比较
-lt 小 于
-le 小于等于
-eq 等 于
-gt 大 于
-ge 大于等于
ne 不等于
2) 按照文件权限进行判断
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行的权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
6.3实例
案例 1:"ok"是否等于"ok"
if [ "ok" = "ok" ]
then
echo "equal"
fi
案例 2:23 是否大于 22
if [ 23 -gt 22 ]
then
echo "大于"
fi
案例 3:/root/install.log 目录中的文件是否存在
if [ -e /root/shell/aaa.txt ]
then
echo "存在"
fi
[root@Centos7 shell]# ./if.sh
equal
大于
存在
7.流程控制
7.1if 判断
基本语法
if [ 条件判断式 ];
then 程序
fi
if [ 条件判断式 ]
then
程序
elif [条件判断式]
then 程序
fi
实例:判断参数列表第一个数字是否大于60
if [ $1 -ge 60 ]
then echo "及格了"
elif [ $1 -lt 60 ]
then echo "不及格"
fi
注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式
7,2case 语句
基本语法
case $变量名 in
"值 1") 如果变量的值等于值 1,则执行程序 1
;;
"值 2") 如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
实例:当命令行参数是1时,输出"周一",是2时,就输出"周二",其它情况输出 "other"
case $1 in
"1") echo "周一";;
"2") echo "周二";;
*) echo "other";;
esac
7.3for循环
基本语法 1
for 变 量 in 值 1 值 2 值 3…
do 程序
done
基本语法 2
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
案例 1 :打印命令行输入的参数 【会使用到$* $@】
for i in "$*"
do echo "the num is $i"
done
for j in "$@"
do echo "the num is $j"
done
[root@Centos7 shell]# ./pro.sh 1 2 3 4
the num is 1 2 3 4
the num is 1
the num is 2
the num is 3
案例 2 :从 1 加到 100 的值输出显示
SUM=0
for ((i=1;i<=100;i++))
do SUM=$[$SUM+$i]
done
echo "sum=$SUM"
7.4while 循环
基本语法
while [ 条件判断式 ]
do
程序
done
案例 1 :从命令行输入一个数 n,统计从 1+..+ n 的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
8. read 读取控制台输入
基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
案例:读取控制台输入一个 num 值,在 10 秒内输入
read -t 10 -p "请输入一个数num1=" NUM
echo "你输入的值是num=$NUM"
9.函数
9.1系统函数
9.1.1basename
基本语法
basename [pathname] [suffix] 返回完整路径最后 / 的部分,常用于获取文件名
basename [string] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
实例
[root@Centos7 shell]# basename /home/aaa.txt
aaa.txt
[root@Centos7 shell]# basename /home/aaa.txt .txt
aaa
9.1.1dirname
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
实例:
[root@Centos7 shell]# dirname /home/aaa/test.txt
/home/aaa
9.2自定义函数
基本语法
[ function ] funname[()]
Action; [return int;]
}
应用实例
function getSum(){
SUM=$[$n1+$n2]
echo "sum=$SUM"
}
read -p "请输入第一个数n1:" n1
read -p "请输入第一个数n2:" n2
getSum $n1 $n2
10.Shell 编程综合案例
需求分析
1)每天凌晨 2:10 备份 数据库 atguiguDB 到 /data/backup/db
2)备份开始和备份结束能够给出相应的提示信息
3)备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2018-03-12_230201.tar.gz
4)在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。
代码实现