跳转至

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