shell 脚本 ¶
数组
相当于一些元素的集合,可以从中拿取相关的元素数据,将内容放在()小括号里面,数组之间的元素使用空格来分隔,下标从0开始。
定义数组 ¶
#静态数组
array=(1 2 3 4 5)
#动态数组
array=($(ls))
#为数组赋值
array[3]=4
打印所有元素 ¶
echo ${array[*]} 或 echo ${array[@]}
#打印数组长度
echo ${#array[*]} 或 echo ${#array[@]}
#打印单个元素
echo ${array[i]}
小栗子 ¶
#静态数组
array=(1 2 3 4 5)
echo "数组定义:array=(1 2 3 4 5)"
#打印数组长度
echo 数组长度为:${#array[*]}
#打印单个元素
echo 数组的第三个元素是:${array[3-1]}
#打印所有元素
echo 所有元素:${array[*]}
# 取消 第三个数组的值
unset array[3-1]
echo 取消数组第三个值后打印的所有元素:${array[*]}
# 循环输出数组中的所有值
echo "循环输出数组中的所有值"
for i in ${array[*]}
do
echo $i
done
# 使用 c 语言的 for 循环
echo c 语言的 for 循环
array=(1 2 3 4 5)
for ((i=0;i<${#array[*]};i++))
do
echo ${array[i]}
done
# 使用 while 循环
echo 用 while 循环
i=0
while ((i<${#array[*]}))
do
echo ${array[i]}
((i++))
done
小栗子2 ¶
echo for循环打印下面这句话中字母数不大于5的单词
echo "Please print words with no more than 5 letters"
array=(Please print words with no more than 5 letters)
#1.使用for循环,提示:-L是统计长度,-l是列出行数
for i in ${array[@]}
do
if [ `echo $i | wc -L` -lt 5 ];then
echo $i
fi
done
#说明:首先使用for循环遍历出所有单词,然后使用wc -L进行统计,打印单词小于5的
#2.使用expr计算长度
for i in ${array[@]}
do
if [ `expr length $i` -lt 5 ];then
echo $i
fi
done
#3.使用c语言的for循环
for ((i=0;i<${#array[*]};i++))
do
if [ ${#array[$i]} -lt 5 ];then
echo ${array[$i]}
fi
done
小栗子3 监控网站 ¶
批量检查多个网站地址是否正常,如果不正常发邮件通知运维人员检查
#!/bin/bash
DATE=$(date "+%F +%H:%M")
MAIL=linuxnbg@163.com
array=(
https://www.baidu.com
https://www.bilibili.comf
)
while ((1==1))
do
for i in ${array[@]} #使用for循环网站
do
wget --timeout=5 --tries=1 $i -q -O /dev/null #进行访问
if [ $? -ne 0 ];then #判断返回值,如果不等于0,就是访问失败,发邮件给运维
content="$i access fail"
echo "date:$DATE" | mail -s "$content" $MAIL
fi
done
exit 1 #检查完退出脚本
done
shell 安装邮件服务
apt install mailx
cat /etc/mail.rc
set from=
set smtp=
set smtp-auth-user=
set smtp-auth-password=
set smtp-auth=login