做论坛网站 备案吗,wordpress怎样连接数据库,长沙网站建设公司联系方式,在线拼图网页版首先继续上次的内容看一下另一个案例案例#xff1a;持续检查服务器负载uptime查看负载情况#xff08;也可以用top命令#xff09;[rootlocalhost ~]# uptime22:11:26 up 7:05, 3 users, load average: 0.00, 0.00, 0.00#!/bin/bash
#Function:持续检查服务器负载,如果负…首先继续上次的内容看一下另一个案例案例持续检查服务器负载uptime查看负载情况也可以用top命令
[rootlocalhost ~]# uptime22:11:26 up 7:05, 3 users, load average: 0.00, 0.00, 0.00
#!/bin/bash
#Function:持续检查服务器负载,如果负载过高则发送警告邮件
while true
doload$(uptime | awk {print $10} | tr -s , )if [ $(echo $load 1.0 | bc) -eq 1 ];thenecho Warning:Server load is high:$load | mail -s Server load warning adminexample.comfisleep 300
done该代码可能执行不成功案例持续监控应用日志
[rootlocalhost ~]# grep -i error /var/log/messages
Aug 26 19:30:52 localhost /usr/sbin/irqbalance[1044]: Cannot change IRQ 73 affinity: Input/output error
Aug 26 19:30:52 localhost /usr/sbin/irqbalance[1044]: Cannot change IRQ 63 affinity: Input/output error案例逐行读取文件
[rootlocalhost ~]# vim test.sh
#!/bin/bash
while read line
dousername$(echo $line | cut -d: -f1)time$(echo $line | cut -d: -f3)time$(date -d $[time*24*3600])echo ${username}-$time
done /root/shadow
[rootlocalhost ~]# ./test.sh
root-2025年 09月 08日 星期一 08:00:00 CST
bin-2024年 12月 24日 星期二 08:00:00 CST
daemon-2024年 12月 24日 星期二 08:00:00 CST
adm-2024年 12月 24日 星期二 08:00:00 CST
lp-2024年 12月 24日 星期二 08:00:00 CST
sync-2024年 12月 24日 星期二 08:00:00 CST
shutdown-2024年 12月 24日 星期二 08:00:00 CST
halt-2024年 12月 24日 星期二 08:00:00 CST
mail-2024年 12月 24日 星期二 08:00:00 CST
operator-2024年 12月 24日 星期二 08:00:00 CST
games-2024年 12月 24日 星期二 08:00:00 CST
ftp-2024年 12月 24日 星期二 08:00:00 CST
nobody-2024年 12月 24日 星期二 08:00:00 CST
systemd-coredump-2025年 08月 26日 星期二 08:00:00 CST
dbus-2025年 08月 26日 星期二 08:00:00 CST
polkitd-2025年 08月 26日 星期二 08:00:00 CST
saslauth-2025年 08月 26日 星期二 08:00:00 CST
dhcpd-2025年 08月 26日 星期二 08:00:00 CST
sshd-2025年 08月 26日 星期二 08:00:00 CST
rpc-2025年 08月 26日 星期二 08:00:00 CST
tss-2025年 08月 26日 星期二 08:00:00 CST
apache-2025年 08月 26日 星期二 08:00:00 CST
unbound-2025年 08月 26日 星期二 08:00:00 CST
libstoragemgmt-2025年 08月 26日 星期二 08:00:00 CST
cockpit-ws-2025年 08月 26日 星期二 08:00:00 CST
cockpit-wsinstance-2025年 08月 26日 星期二 08:00:00 CST
pesign-2025年 08月 26日 星期二 08:00:00 CST
chrony-2025年 08月 26日 星期二 08:00:00 CST
tcpdump-2025年 08月 26日 星期二 08:00:00 CST
tom-2025年 09月 08日 星期一 08:00:00 CST
lynn-2025年 09月 08日 星期一 08:00:00 CST
user1-2025年 09月 08日 星期一 08:00:00 CST循环控制语句continuecontinue [N]提前结束第N层的本轮循环而直接进入下一轮判断最内层为第1层用法示例
[rootlocalhost ~]# vim continue.sh
#!/bin/bash
i1
while [ $i -le 10 ]
doecho $ilet i
done
[rootlocalhost ~]# chmod x continue.sh
[rootlocalhost ~]# ./continue.sh
1
2
3
4
5
6
7
8
9
10循环控制语句breakbreak [N]提前结束第N层后的全部循环最内层为第1层默认为1
[rootlocalhost ~]# vim break.sh
for((i0;i10;i));do[ $i -eq 5 ] breakfor((j0;j10;j));do[ $j -eq 5 ] breakecho $jdoneecho ----------------------------
done
[rootlocalhost ~]# chmod x break.sh
[rootlocalhost ~]# ./break.sh
0
1
2
3
4
----------------------------
0
1
2
3
4
----------------------------
0
1
2
3
4
----------------------------
0
1
2
3
4
----------------------------
0
1
2
3
4
----------------------------shift技术
shift命令用于对参数的向左移动通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应的处理(常见与Linux中各种程序的启动脚本)。在扫描处理脚本程序的参数时经常要用到shift命令shift命令每执行一次参数序列顺次左移一个位置$#的值减1用于分别处理每个参数移出去的参数不可再用注意$#表示脚本后跟随的参数总的个数$n可以获取脚本后跟随的第n个参数的值示例
[rootlocalhost ~]# vim shift.sh
#!/bin/bashwhile [ $# -ne 0 ]
doecho 一共$#个参数内容分别是for i in seq $#;doecho -n -e $i\tdoneechoshift
done
[rootlocalhost ~]# ./shift.sh 1 2
一共2个参数内容分别是
1 2
一共1个参数内容分别是
1案例累加1-100
[rootlocalhost ~]# vim sum.sh
#!/bin/bash
sum0
for((i0;i100;i))
dolet sum$i
done
echo $sum
[rootlocalhost ~]# ./sum.sh
5050Shell中的数组
1.1Shell数组的定义数组的基本定义在Shell中用小括号()来表示数组数组元素之间用空格来分隔
[rootlocalhost ~]# array1(1 2 3 4 5 6)
[rootlocalhost ~]# echo ${array1[*]} #输出数组的所有元素
1 2 3 4 5 6
[rootlocalhost ~]# echo ${array1[]} #输出数组的所有元素
1 2 3 4 5 6
[rootlocalhost ~]# echo ${array1[0]} #输出数组的第N个数由0代表第一个数开始
1
[rootlocalhost ~]# echo ${array1[2]} #输出数组的第3个数
32采用键值对的形式赋值在Shell中用小括号将变量括起来同时采用键值对的形式赋值
[rootlocalhost ~]# array2([1]one [2]two [3]three)
[rootlocalhost ~]# echo ${array2[*]} #输出数组的所有元素
one two three
[rootlocalhost ~]# echo ${array2[]} #输出数组的所有元素
one two three
[rootlocalhost ~]# echo ${#array2[]} #输出数组的元素个数
33动态定义数组数量动态地定义数组变量并使用命令的输出结果作为数组的内容
[rootlocalhost ~]# array3($(ls /boot))
[rootlocalhost ~]# echo ${#array3[*]} #输出定义数组的元素个数
13
[rootlocalhost ~]# echo ${array3[0]}
config-6.6.0-72.0.0.76.oe2403sp1.x86_642.Shell数组的打印打印单个数组元素 ${数组名[下标]} 。当未指定数组下标时下标默认从0开始打印全部数组内容${数组名[]}或 ${数组名[*]}打印数组元素的个数${#数组名[]}或 ${#数组名[*]}3.Shell数组的赋值如果下标不存在则自动添加一个新的元素如果下标存在则覆盖原来的值4.Shell数组的拼接合并所谓Shell数组拼接(数组合并)就是将两个数组连接成一个数组拼接数组的思路是先利用或者*将数组扩展成列表然后再合并到一起具体格式如下
[rootlocalhost ~]# array1(1 2 3 4 5 6)
[rootlocalhost ~]# array2(7 8 9 10 11 12)
[rootlocalhost ~]# array3(${array1[]} ${array2[]})
[rootlocalhost ~]# echo ${array3[*]}
1 2 3 4 5 6 7 8 9 10 11 125.Shell删除数组元素在Shell中使用unset关键字来删除数组元素具体格式如下
[rootlocalhost ~]# unset array3[2]
[rootlocalhost ~]# echo ${array3[*]}
1 2 4 5 6 7 8 9 10 11 12
[rootlocalhost ~]# unset array3
[rootlocalhost ~]# echo ${array3[*]}[rootlocalhost ~]# 6.获取数组某范围的元素在Shell中直接通过${数组名[/*]:起始位置:长度}获取数组给定范围内元素返回字符串中间用空格分开
[rootlocalhost ~]# arr1(1 2 3 4 5)
[rootlocalhost ~]# echo ${arr1[*]:1:2}
2 3
[rootlocalhost ~]# echo ${arr1[]:0:4}
1 2 3 4mapfile命令
mapfile直接用一个指令交互式的生成一个数组
[rootlocalhost ~]# ls /boot/ boot.txt
[rootlocalhost ~]# mapfile arr6 boot.txt
[rootlocalhost ~]# echo ${arr6[*]}
config-6.6.0-72.0.0.76.oe2403sp1.x86_64 dracut efi grub2 initramfs-0-rescue-5a44ea1f344449c0863349ae24820f72.img initramfs-6.6.0-72.0.0.76.oe2403sp1.x86_64.img initramfs-6.6.0-72.0.0.76.oe2403sp1.x86_64kdump.img loader lostfound symvers-6.6.0-72.0.0.76.oe2403sp1.x86_64.gz System.map-6.6.0-72.0.0.76.oe2403sp1.x86_64 vmlinuz-0-rescue-5a44ea1f344449c0863349ae24820f72 vmlinuz-6.6.0-72.0.0.76.oe2403sp1.x86_64shell中的函数
shell函数的定义注意在shell里不支持函数的参数传入只支持脚本的参数传入所以name内不能写任何东西。本质的作用就是将一段重复的代码编入脚本中放在指定位置使用时直接调用。示例
[rootlocalhost ~]# vim sum.sh
#!/bin/bash
c1$1
c2$2
c3$3
sum() {
sum10
for i in $(seq $c1 $c2 $c3)
dolet sum1$i
done
echo $sum1
}
sum
[rootlocalhost ~]# chmod x sum.sh
[rootlocalhost ~]# ./sum.sh 1 100
5050案例在子shell里调用的函数在父shell里不能输出
[rootlocalhost ~]# vim sum.sh
#!/bin/bash
c1$1
c2$2
c3$3
sum() {
sum10
for i in $(seq $c1 $c2 $c3)
dolet sum1$i
done
return $sum1
}
sum
[rootlocalhost ~]# ./sum.sh 1 100
[rootlocalhost ~]# echo $sum1[rootlocalhost ~]# source sum.sh 1 100
[rootlocalhost ~]# echo $sum1
5050return的效果把结果存储在一个位置上Shell函数的调用调用 Shell 函数时可以给它传递参数也可以不传递。如果不传递参数直接给出函数名字即可Shell的八大扩展功能不重要
花括号在shell脚本中可以使用括号对字符串进行扩展我们可以在一对花括号中包含一组以分号分隔的字符串或者字符串序列组成一个字符串扩展注意最终输出结果以空格分隔使用该扩展花括号不可以被引号引用花括号的数量必须是偶数个
[rootlocalhost ~]# echo {1,5} #对字符串进行扩展
1 5
[rootlocalhost ~]# echo {hello,world} #对字符串进行扩展
hello world
[rootlocalhost ~]# echo {a..z} #对字符串序列进行扩展
a b c d e f g h i j k l m n o p q r s t u v w x y z
#字符串后面可以跟一个步长整数默认为1或-1
[rootlocalhost ~]# echo {a..z..2}
a c e g i k m o q s u w y
[rootlocalhost ~]# echo {a..z..3}
a d g j m p s v y
[rootlocalhost ~]# echo {1..9..3}
1 4 7
[rootlocalhost ~]# echo {1..9..2}
1 3 5 7 9
[rootlocalhost ~]# echo {a..z} #花括号扩展不能使用引号
{a..z}
[rootlocalhost ~]# echo t{i,o}p #花括号前后都可以添加可选字符串
tip top
[rootlocalhost ~]# echo t{o,e{a,m}}p #花括号支持嵌套
top teap temp
#花括号批量操作
[rootlocalhost ~]# mkdir -p t{o,e{a,m}}p
[rootlocalhost ~]# touch t{o,e{a,m}}p/{a,b,c,d}e.txt
波浪号波浪号在Shell脚本中默认代表当前用户家目录[rootlocalhost /]# echo ~ #显示当前用户的家目录
/root
[rootlocalhost /]# echo ~/elk
/root/elk
[rootlocalhost /]# echo ~elk #显示特定用户的家目录,该用户必须存在
/home/elk
[rootlocalhost /]# echo ~ #显示当前工作目录
/
[rootlocalhost /]# echo ~- #显示前一个工作目录
/root
变量替换在Shell脚本中我们会使用 对变量进行扩展替换变量字符可以放到花括号中这样可以防止需要扩展的变量字符与其他不需要扩展的字符混淆如果 对变量进行扩展替换变量字符可以放到花括号中这样可以防止需要扩展的变量字符与其他不需要扩展的字符混淆如果 对变量进行扩展替换变量字符可以放到花括号中这样可以防止需要扩展的变量字符与其他不需要扩展的字符混淆如果后面是位置变量且多余一个数字必须使用{}[rootlocalhost ~]# ahello word
[rootlocalhost ~]# echo $a
hello word
[rootlocalhost ~]# echo ${a}
hello word
[rootlocalhost ~]# ba
[rootlocalhost ~]# echo ${b} #直接返回变量的值
a
[rootlocalhost ~]# echo ${!b} #间接引用a变量的值
hello word
[rootlocalhost ~]# cb
[rootlocalhost ~]# echo ${!c} #尽可以实现一层简介引用
a
变量替换操作还可以测试变量是否存在及是否为空若变量不存在或为空则可以为变量设置一个默认值Shell脚本支持多种形式的变量测试与替换功能如下表所示语法格式功能描述${变量:-关键字}如果变量未定义或为空则返回关键字否则返回变量值${变量:关键字}如果变量未定义或为空则将关键字赋值给变量并返回结果否则直接返回变量值${变量:?关键字}如果变量未定义或为空则通过标准错误显示包含关键字的错误信息否则返回变量值${变量:关键字}如果变量未定义或为空则直接返回空否则返回关键字唯一要了解basename和dirname其余的都不重要。
basename和dirname:basename可以获取一个路径中的文件名dirname仅保留路径删除文件名