Shell脚本编程
一. Linux中定时任务
crontab:
-e:用来编辑定时任务
-l:查看当前定时任务
-r:删除当前的定时任务
在crontab中设置定时时间需要使用cron表达式
cron表达式:* * * * *,cron表达式一般是由5部分组成,每一部分之间使用空格分开。
第一个*:分钟(0-59) 1 * * * * 每个小时的第一分钟执行,时间间隔为一个小时
第二个*:小时(0-23) 1 2 * * * 每天凌晨2点零一分执行,时间间隔为一天
第三个*:天(月中的天1-31)
第四个*:月(1-12)
第五个*:星期几(0-6) 1 2 * * 3 每个星期的星期三执行,时间间隔为一周
注意:月中的天和星期只能选择设置一个
cron表达式中常见的符号:
*:代表任意的一个时间
/:表示时间间隔 */1 * * * * 表示每隔1分钟执行一次
,:表示时间列表 * 2,4,6,8 * * * 表示每天2点,4点,6点,8点执行
-:表示连续的时间 * 9-17 * * * 表示9点到17点执行
二. Shell脚本编程
Shell 可以看作是一个命令的解释器,就是用户和 Linux 操作系统之间的一个接口
Shell 脚本就是将多条 Linux 命令进行封装,然后进行独立的调用
查看解释器:echo $SHELL
1. 创建一个文本文件,一般建议该文本文件的后缀名为.sh
touch test.sh
2. 使用 vi 编辑器进行文件的编辑操作
vi test.sh
#! /bin/bash Shell脚本所使用的解释器,不写也行,系统默认为该解释器
echo 'Hello Shell'
3. 执行 Shell 脚本
(1)使用解释器命令执行
bash test.sh | sh test.sh
(2)直接执行(使用 shell 脚本的绝对路径或者相对路径执行)
/root/test.sh | ./test.sh
注意:shell 脚本必须有执行权限
(3)使用 source 执行
source test.sh
. test.sh
三. Shell 脚本中的语法规则
1. 注释:在 shell 脚本中注释只有单行注释没有多行注释
语法:#注释的内容
2. 变量
2.1 变量的分类:
(1)用户自定义的变量:用户在编写 shell 脚本的时候需要设置一些参数,可以将这些参数定义成变量,这类变量的使用范围为当前的 shell 脚本
(2)环境变量:用户可以自己定义一些变量将这些变量添加到指定的一些系统配置文件或者是用户配置的文件中,然后可以让多个 shell 脚本使用
(3)系统变量:系统预先定义好的变量,可以直接访问
2.2. 变量的定义:
语法:变量名=变量值
注意:在进行定义变量的时候=左右两边不能出现空格,变量名必须符合规范
2.3 变量的使用:
语法:$变量名 或者 ${变量名}
注意:单引号和双引号都代表是一个字符串,但是双引号可以解析变量的值并且使用,单引号则是将里面的内容全部当作字符串,字符串的拼接直接写在一起就可以
2.4 查看变量:set
2.5 删除变量:unset
2.6 只读变量(常量):readonly 常量名=值,不能修改,也不能删除
2.7 参数变量:在执行脚本的时候或者执行函数的时候需要传入一些数据,这些数据就是参数,参数变量主要就是对传入的参数的获取操作
(1)$n:获取指定的第n个参数的值,n从0开始,0代表获取该脚本的名称
(2)$*:获取脚本中传入的所有参数,会拼接成一个字符串
(3)$@:获取脚本中传入的所有参数,获取到的是一个数组
(4)$#:获取脚本传入参数的个数
2.8 接受用户键盘输入的内容:
语法:read -p 提示文字 变量名
四. Shell 脚本中的运算符
1. 算术运算符
+,-,*,/,%
在 shell 脚本中不能直接进行算术运算符的执行
方式一:使用命令expr
语法:`expr $变量1 + $变量2`
`expr $变量1 \* $变量2`
注意:使用expr的时候必须要使用反引号引起来,运算符前后必须有空格,做乘法运算时需要使用转义符号\
方式二:使用双括号进行运算
语法:$((运算表达式))
2. 关系运算符:使用 test 命令来执行关系运算符
(1)数值类
-gt:大于 a -gt b
-ge:大于等于 a -ge b
-lp:小于 a -lp b
-le:小于等于 a -le b
-eq:等于 a -eq b
-ne:不等于 a -ne b
如果要获取 test 执行的结果,则需要使用系统预定义好的变量:$? (真为0,假为1)
(2)字符串类
test 字符串1==字符串2:比较两个字符串相等
test 字符串1!=字符串2:比较两个字符串不相等
test 字符串:判断字符串是否不为空,非空为真,空为假
test -n 字符串:判断字符串是否不为空,非空为真,空为假
test -z 字符串:判断字符串是否为空,为空为真,非空为假
(3)文件类
test -d 文件名:判断当前文件是否为文件夹
test -e 文件名:判断指定的文件是否存在
test -f 文件名:判断指定的文件是否为一个普通文件
test -L 文件名:判断指定的文件是否为一个链接文件
test -r |-w|-x 文件名:判断指定的文件是否为可 读/写/执行 文件
3. 逻辑运算符
逻辑与:-a
条件1 -a 条件2
执行结果:两个条件都为真则结果为真,否则为假
逻辑或:-o
条件1 -o 条件2
执行结果:两个条件只要有一个为真则结果为真,否则为假
逻辑非:!
!条件
执行结果:如果条件为真则结果为假,否则为真
执行条件运算的方式:
[ 条件表达式 ]:使用中括号进行条件运算
注意:使用[]时必须保证里面前后有空格
4. 三元运算符:
语法:[ 条件判断 ] && 语句1 || 语句2
五. 流程控制语句
1. 分支语句
(1)if 语句
语法一:if [ 条件判断 ]
then
条件成立执行的代码
fi;
语法二:if [ 条件判断 ]; then
条件成立执行的代码
fi;
(2)if ... else 语句
语法:if [ 条件判断 ]; then
条件成立执行的代码
else
条件不成立执行的代码
fi;
(3)if ... elif ... else 语句
语法:if [ 条件判断1 ]; then
条件1成立执行的代码
elif [ 条件判断2 ]; then
条件2成立执行的代码
else
条件都不成立时执行的代码
fi;
(4)case语句
语法:case 变量 in
值1)
当变量的值与值1匹配时执行的代码
;;
值2)
当变量的值与值2匹配时执行的代码
;;
...
*)
当变量的值和以上都不匹配时执行的代码
esac
2. 循环语句
(1)for 循环
语法一:for 变量 in 列表
do
循环体
done;
例子:
for i in {1..50}
do
echo $i
done;
语法二:for ((循环变量初始化;循环条件;循环变量值的改变))
do
循环体
done;
例子:
for((i=0;i<100;i++))
do
sum=$((sum+i))
done;
(2)while 循环
语法:while [ 循环条件 ]
do
循环体
done;
(3)until 循环
语法:untile [ 循环条件 ]
do
循环体
done;
执行过程:先判断循环条件,如果循环条件不成立则执行循环体,条件成立结束循环
(4)流程控制关键字
break; 结束循环
continue; 跳过本次循环
六. Shell中的函数以及函数的调用
语法一:
函数名(){
函数体
}
语法二:
function 函数名(){
函数体
}
函数调用:
语法:函数名[ 参数值 参数值 ... ]
与脚本调用时的传参一致
函数跨文件调用:
语法:source Shell脚本的绝对路径
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?