Shell 脚本 100 例《十》

91. 查看所有虚拟机磁盘使用量以及 CPU 使用量信息
#!/bin/bash
virt‐df
read  ‐n1  "按任意键继续"  key
virt‐top
 
92. 使用 shell 脚本打印如下图形:
 
 
 
#!/bin/bash
#Author:丁丁历险(Jacob)
#打印第一组图片
#for(())为类 C 语言的语法格式,也可以使用 for i  in;do  ;done 的格式替换
#for((i=1;i<=9;i++))循环会执行 9 次,i 从 1 开始到 9,每循环一次 i 自加 1
clear
for (( i=1; i<=9; i++ ))
do
    for (( j=1; j<=i; j++ ))
  do
      echo ‐n "$i"
  done
  echo ""
done
read  ‐n1  "按任意键继续"  key
#打印第二组图片
clear
for (( i=1; i<=5; i++ )) do
    for (( j=1; j<=i; j++ ))
  do
      echo ‐n " |"
  done
  echo "_ "
done
read  ‐n1  "按任意键继续"  key
#打印第三组图片
clear
for (( i=1; i<=5; i++ ))
do
    for (( j=1; j<=i; j++ ))
  do
      echo ‐n " *"
  done
  echo ""
done
 
for (( i=5; i>=1; i‐‐ ))
do
  for (( j=1; j<=i; j++ ))
  do
       echo ‐n " *"
  done
  echo ""
done
 
93. 根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动
#!/bin/bash
#Author:丁丁历险(Jacob)
#00‐12 点为早晨,12‐18 点为下午,18‐24 点为晚上
#使用 date 命令获取时间后,if 判断时间的区间,确定问候语内容
tm=$(date +%H)
if [ $tm ‐le 12 ];then
  msg="Good Morning $USER"
elif [ $tm ‐gt 12 ‐a $tm ‐le 18 ];then
  msg="Good Afternoon $USER"
else
  msg="Good Night $USER"
fi
echo "当前时间是:$(date +"%Y‐%m‐%d %H:%M:%S")"
echo ‐e "\033[34m$msg\033[0m"
 
94. 读取用户输入的账户名称,将账户名写入到数组保存
#!/bin/bash
#Author:丁丁历险(Jacob)
#定义数组名称为 name,数组的下标为 i,小标从 0 开始,每输入一个账户名,下标加 1,继续存下一个账户
#最后,输入 over,脚本输出总结性信息后脚本退出
i=0
while :
do
  read ‐p "请输入账户名,输入 over 结束:" key
  if [ $key == "over" ];then 
break
  else
 
name[$i]=$key
 
let i++
  fi
done
echo "总账户名数量:${#name[*]}"
echo "${name[@]}"
 
95. 判断文件或目录是否存在
#!/bin/bash
if [ $# ‐eq 0 ] ;then
echo    "未输入任何参数,请输入参数"
echo    "用法:$0 [文件名|目录名]"
fi
if [ ‐f $1 ];then
echo "该文件,存在"
ls -l $1
else
echo    "没有该文件"
fi
if [ ‐d  $1 ];then
     echo "该目录,存在"
     ls ‐ld  $2
else
     echo "没有该目录"
fi
 
96. 打印各种时间格式
#!/bin/bash
#Author:丁丁历险(Jacob)
echo "显示星期简称(如:Sun)"
date +%a
echo "显示星期全称(如:Sunday)"
date +%A
echo "显示月份简称(如:Jan)"
date +%b
echo "显示月份全称(如:January)"
date +%B
echo "显示数字月份(如:12)"
date +%m
echo "显示数字日期(如:01 号)"
date +%d
echo "显示数字年(如:01 号)"
date +%Y echo "显示年‐月‐日"
date +%F
echo "显示小时(24 小时制)"
date +%H
echo "显示分钟(00..59)"
date +%M
echo "显示秒"
date +%S
echo "显示纳秒"
date +%N
echo "组合显示"
date +"%Y%m%d %H:%M:%S"
 
97. 使用 egrep 过滤 MAC 地址
#!/bin/bash
#Author:丁丁历险(Jacob)
#MAC 地址由 16 进制组成,如 AA:BB:CC:DD:EE:FF
#[0‐9a‐fA‐F]{2}表示一段十六进制数值,{5}表示连续出现 5 组前置:的十六进制
egrep "[0‐9a‐fA‐F]{2}(:[0‐9a‐fA‐F]{2}){5}" $1
 
98. 统计双色球各个数字的中奖概率
#!/bin/bash
#Author:丁丁历险(Jacob)
#往期双色球中奖号码如下:
#01 04 11 28 31 32  16
#04 07 08 18 23 24  02
#02 05 06 16 28 29  04
#04 19 22 27 30 33  01
#05 10 18 19 30 31  03
#02 06 11 12 19 29  06
#统计篮球和红球数据出现的概率次数(篮球不分顺序,统计所有篮球混合在一起的概率)
awk '{print $1"\n"$2"\n"$3"\n"$4"\n"$5"\n"$6}' 1.txt |sort |uniq ‐c | sort
awk '{print $7}' 1.txt |sort |uniq ‐c | sort
 
99. 生成自签名私钥和证书
#!/bin/bash
#Author:丁丁历险(Jacob)
read ‐p "请输入存放证书的目录:" dir
if [ ! ‐d $dir ];then
  echo "该目录不存在"
  exit
fi
read ‐p "请输入密钥名称:" name
#使用 openssl 生成私钥
openssl genrsa ‐out ${dir}/${name}.key
#使用 openssl 生成证书 #subj 选项可以在生成证书时,非交互自动填写 Common Name 信息
openssl req ‐new ‐x509 ‐key ${dir}/${name}.key ‐subj "/CN=common" ‐out ${dir}/${name}.crt
 
100.
使用 awk 编写的 wc 程序
#!/bin/bash
#自定义变量 chars 变量存储字符个数,自定义变量 words 变量存储单词个数
#awk 内置变量 NR 存储行数
#length()为 awk 内置函数,用来统计每行的字符数量,因为每行都会有一个隐藏的$,所以每次统计后都+1
#wc 程序会把文件结尾符$也统计在内,可以使用 cat ‐A 文件名,查看该隐藏字符
awk '{chars+=length($0)+1;words+=NF} END{print NR,words,chars}'  $1

猜你喜欢

转载自my.oschina.net/szwangsen/blog/1613335