『BASH』

一、显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小

1 #!/usr/bin/bash
2 printf \
3 " Hostname: $(hostname)\n \
4 IPv4: $(ip addr | grep -oP '(\d+\.){3}\d+/\d+' | awk 'BEGIN{ORS=" "}{print}')\n \
5 OS_version: $(cat /etc/gentoo-release)\n \
6 Kernel_version: $(uname -r)\n \
7 Cpu: $(uname -p)\n \
8 TotalMem(kiB): $(cat /proc/meminfo | grep -oP  '(?<=MemTotal:)\s*\d+' | sed 's/ \+//g')\n \
9 TotalDisksize(kiB): $(cat /sys/block/sd*/size | gawk 'BEGIN{printf "(";ORS=" + "}{print}END{printf "0) / 2\n"}' | bc)\n"
f@z ~/bash_script $ bash systeminfo.sh 
 Hostname: z
 IPv4: 127.0.0.1/8 172.18.16.4/24 
 OS_version: Funtoo Linux - baselayout 2.2.1
 Kernel_version: 4.4.16
 Cpu: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
 TotalMem(kiB): 16437364
 TotalDisksize(kiB): 1211193648

二、计算/etc/passwd文件中的第10个用户和第20用户的ID之和

#!/bin/bash
sed -n '10p;20p' /etc/passwd | gawk -F: 'BEGIN{ORS=" + ";printf "("}{print $3}END{printf "0)" "\n"}' | bc
f@z ~/bash_script $ bash sumid.sh 
1010

三、传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

f@z ~/bash_script $ cat sum_blanklines.sh 
#!/bin/bash
read -p "请输入一个文件路径: " file1
read -p "请再输入一个文件路径: " file2
printf "这两个文件中的空白行数合计: $(grep -P '^\s*$' $file1 $file2 | wc -l)\n"
f@z ~/bash_script $ bash sum_blanklines.sh 
请输入一个文件路径: passwd
请再输入一个文件路径: passwd1
这两个文件中的空白行数合计: 6

四、统计/etc, /var, /usr目录中共有多少个一级子目录和文件

#!/bin/bash
find /etc /var /usr -maxdepth 1 | wc -l

五、接受一个文件路径作为参数;若参数个数小于1,则提示“不能为空”,并再次提示输入;若参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

f@z ~/bash_script $ cat args_num.sh 
#!/bin/bash
path() {
    printf "请输入一个文件路径: "
}
path
read Path
until [[ $Path != "" ]]
do 
    printf "不能为空!\n"
    path
    read Path
done
    grep -P '^\s*$' $Path | wc -l

六、接受一个主机的IPv4地址做为参数,测试是否可连通,若能ping通,则提示用户“该IP可访问”;若不通,则提示用户“ 该IP不可访问”

#!/bin/bash
read -p "请输入一个IPv4地址: " IPv4
ping -w 1 -c 1 $IPv4 > /dev/null
if [[ $? == "0" ]]
then
    printf "该IP可访问\n"
else
    printf "该IP不可访问\n"
fi

七、判断硬盘的每个分区空间和inode的利用率是否大于80%,如果是,发邮件通知root磁盘将满

#!/bin/bash
InodeUsed=$(df -i | gawk '{if ($5 ~ /[8-9][0-9]%|100%/) print $1 " " $5}')
SpaceUsed=$(df | gawk '{if ($5 ~ /[8-9][0-9]%|100%/) print $1 " " $5}')
if [[ $InodeUsed != "" || $SpaceUsed != "" ]]
then
    echo -e "如下分区空间使用率已超过80%:\n${SpaceUsed}\n如下分区Inode使用率已超过80%:\n${InodeUsed}\n" | mail -s Disk_Space_Warning root 
fi

八、计算1到100之间整数的和

#!/bin/bash
echo {1..100} | tr ' ' '+' | bc

九、判断输入的IP是否为合法IP(粗略判断,重点在于脚本中正则的应用)

#!/bin/bash
if [[ $1 =~ ([0-9]+\.){3}[0-9]+ ]]
then
    printf "IP合法\n"
else
    printf "IP不合法\n"
fi

十、输入起始值A和最后值B,计算从A+(A+1)...+(B-1)+B的总和

f@z ~/bash_script $ cat sum100diy.sh 
#!/bin/bash
read -p "请输入两个正整数: " goal1 goal2
sum=0
if [[ goal1 -gt goal2 ]]
then
    g1=goal1
    g2=goal2
else
    g1=goal2
    g2=goal1
fi

until [[ $g1 -le $g2 ]]
do
    sum=$(($sum + $g1))
    g1=$(($g1 - 1))
done
sum=$(($sum + $g2))
printf "$sum\n"
原文地址:https://www.cnblogs.com/hadex/p/5758965.html