- 常用命令
2.1查看脚本执行过程
2.2查看脚本是否有语法错误
2.3 date命令
2.3.1 显示年、月、日
date +%Y-%m-%d #年(以四位数字格式打印年份)月日
date +%y-%m-%d #年(以两位数字格式打印年份)月日
date +%T #年(以四位数字格式打印年份)月日
2.3.2 显示小时、分钟、秒
2.3.3 显示星期
date +%w #一周中的第几天
date +%W #一年中的第几周
2.3.4 时间戳
命令date +%s显示从1970年1月1日00:00:00UTC到目前为止的秒数
使用命令 date -d @1727241942显示输入秒数之前的时间
2.3.5 显示一个小时/一天/一年 之前\之后
3、Shell脚本中的变量
3.1 引用命令的结果
当我们引用某个变量的结果时,可以使用变量替代
由此可见,我们可以将命令结果赋值给变量,采用两种方式的其中一种实现
3.2 与用户交互
3.3 内置变量
创建一个名为bian.sh的脚本
执行脚本后,再次执行脚本
3.4 数学运算
Shell脚本中的变量常用于数学运算当中
执行脚本
4、shell中的逻辑判断
4.1 不带有else
基础结构:
if 判断语句; then
command
fi
示例如下:
执行脚本
4.2 带有else
基础结构
if 判断语句 ; then
command
else
command
fi
示例如下:
4.3 带有elif
示例如下:
执行脚本
4.4 嵌套
示例如下
执行脚本
多个条件
if [ $a -gt 5 ] && [ $a -lt 10 ] == if [ $a -gt 5 -a $a -lt 10] # -a表示 and
if [ $b -gt 5 ] || [ $b -lt 3] == if [ $b -gt 5 -o $b -lt 3 ] # -o表示 or
4.6 if逻辑判断
4.6.1 if判断文件的目录属性
shell脚本中if经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否有读、写、执行权限等。If常用选项如下:
-e:判断文件或目录是否存在。
-d:判断是不是目录以及是否存在。
-f:判断是不是普通文件以及是否存在。
-T:判断是否有读权限。
-w:判断是否有写权限。
-X:判断是否可执行。
Root用户对文件的读写比较特殊,即使一个文件没有给root用户读或者写的权限,root也可以读或者写
4.6.2 if判断的一些特殊用法
命令if[ -z “$a”];表示当变量a的值为全空时会怎么样
命令 if [ -n "$a" ]; 表示当变量a的值不为空时会怎么样
命令 if grep -q '123' 1.sh; then 表示如果1.sh中含有’123’会怎么样,其中-q表示即使过滤出内容也不要打印出来
if (($a<1)); then 等同于 if [ $a -lt 1 ];then 二者都可以用来进行判断,需要注意的是,当我们未对变量a进行赋值时则会报错,如下图所示
注意:[ ]中不能使用<,>,==,!=,>=,<=这样的符号,需要时要使用固定写法 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=)。
4.7 shell中的case判断
Case判断的基础格式如下
case 变量 in
value1) #不限制value的个数
command
;;
value2)
command
;;
*) #此处*代表其他值
command
;;
esac
实验验证
执行脚本
- shell中的循环
5.1 for循环
基础结构
for 变量名 in 循环条件;
do
command
done
实验演示
执行脚本
5.2 while循环
基础结构
while 条件; do
command
done
示例1:
运行结果:
示例2:
运行结果
- shell中的中断与继续
- 跳出循环
break在脚本中表示跳出该层循环
执行结果:
-
- 结束本次循环
当在shell脚本中使用continue时,结束的不是整个循环,而是本次循环。忽略continue之下的代码,直接进行下一次循环
执行结果
-
- 退出整个脚本
当我们在shell脚本中遇到exit时,其表示直接退出整个shell脚本
执行过程
- shell中的函数
shell脚本中的函数就是先把一段代码整理到了一个小单元中,并给这个小单元命名,当我们用到这段代码时直接调用这个小单元的名字就可以了,这样很方便,省时省力。但我们需要注意,在shell脚本中,函数一定要写在前面,因为函数要被调用的,如果还未出现就被调用就会出错。
基础格式:
function f_name()
{
command
}
-
- 打印出第一个、第二个参数、参数的个数及脚本名
示例:
执行过程
-
- 加法的函数
示例:
执行过程:
-
- 获得一个网卡的ip地址
示例:
执行结果:
- shell中的数组
- 数组读取
首先我们需要先定义一个数组a=(1 2 3 4 5);
命令 echo ${a[@]} 读取数组中的全部元素。示例如下:
命令 echo ${#a[@]} 获取数组的元素个数。示例如下:
命令 echo ${a[2]} 读取第三个元素,数组从0开始。示例如下:
echo ${a[*]} 等同于 ${a[@]} 作用为显示整个数组。示例如下
-
- 数组赋值
a[1]=100; echo ${a[@]} 替换指定的元素值。示例如下
a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素。示例如下:
a[7]=6; echo ${a[@]} 跳着添加元素时,中间未赋值的元素,不显示且无值。示例如下:
-
- 数组的删除
命令unset a[1] 用于删除单个元素。示例如下
命令unset a 用于删除整个数组。示例如下:
-
- 数组分片
在进行实验操作之前,需要对一个数组进行赋值 a=(`seq 1 5`) 。
命令echo ${a[@]:0:3} 表示从第一个元素开始,截取3个元素,并打印出来。示例如下:
命令echo ${a[@]:1:4} 表示从第二个元素开始,截取4个元素,并打印出来。示例如下:
echo ${a[@]:0-3:2} 表示从倒数第3个元素开始,截取2个元素,并打印出来。示例如下:
-
- 数组替换
使用命令echo 使用命令a=(${a[@]/b/100}) 表示用100替换b,这种方法不仅可以打印出来还可以保存替换。示例如下:
使用命令a=${a[@]/b/100} 表示用100替换b,但不会保存替换,只是打印出来。示例如下: