『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"
HADEX_ FROM HELL.