14-1.Shell脚本编写及常见面试题(一)
1)开头加解释器:#!/bin/bash
2)语法缩进,使用四个空格;多加注释说明
3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。
4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。
5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时推出脚本,set -x 打印执行过程
6)写脚本一定先测试再到生产上。
14.1、获取随机字符串或数字
获取随机8位字符串
方法1: # echo $RANDOM |md5sum |cut -c 1-8 471b94f2 方法2: # openssl rand -base64 4 vg3BEg== 方法3: # cat /proc/sys/kernel/random/uuid |cut -c 1-8 ed9e032c
获取随机8位数字:
方法1: # echo $RANDOM |cksum |cut -c 1-8 23648321 方法2: # openssl rand -base64 4 |cksum |cut -c 1-8 38571131 方法3: # date +%N |cut -c 1-8 69024815
cksum:打印CRC校验和统计字节
14.2、定义一个颜色输出字符串函数
方法1: function echo_color() { if [ $1 == "green" ]; then echo -e "\033[32;40m$2\033[0m" elif [ $1 == "red" ]; then echo -e "\033[31;40m$2\033[0m" fi } 方法2: function echo_color() { case $1 in green) echo -e "\033[32;40m$2\033[0m" ;; red) echo -e "\033[31;40m$2\033[0m" ;; *) echo "Example: echo_color red string" esac } 使用方法:echo_color green "test"
function关键字定义一个函数,可加或不加。
14.3、批量创建用户
#!/bin/bash DATE=$(date +%F_%T) USER_FILE=user.txt #定义一个输出显示不同颜色的函数 function echo_color(){ if [ $1 == "green" ];then echo -e "\033[32;40m$2\033[0m " elif [ $1 == "red" ];then echo -e "\033[31;40m$2\033[0m" fi } #判断user.txt文件是否存在了,如果存在了则重命名 if [ -s $USER_FILE ]; then mv $USER_FILE $USER_FILE-${DATE}.bak echo_color green "$USER_FILE is exist, rename ${USER_FILE}-${DATE}.bak" fi #向文件中输入抬头 echo -e "User\tPassword" >> $USER_FILE echo -e "--------------" >> $USER_FILE #循环创建用户user1至10 for USER in user{1..10};do #判断用户是否存在如果不存在则创建 if ! id $USER &> /dev/null; then #生成一个8位数的随机字符串 PASS=$(echo $RANDOM | md5sum | cut -c 1-8) useradd $USER echo $PASS | passwd --stdin $USER &> /dev/null echo -e "$USER\t$PASS">> $USER_FILE echo_color green "$USER user create successful." else echo_color red "$USER user already exists!" fi done
14.4、检查软件包是否安装
#!/bin/bash if rpm -q sysstat &>/dev/null; then echo "sysstat is already installed." else echo "sysstat is not installed!" fi
14.5 检查服务状态
#!/bin/bash HOST_INFO=host.info for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO) PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO) TMP_FILE=/tmp/disk.tmp ssh -p $PORT $USER@$IP 'df -h' > $TMP_FILE USE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5)}' $TMP_FILE) for USE_RATE in $USE_RATE_LIST; do PART_NAME=${USE_RATE%=*} USE_RATE=${USE_RATE#*=} if [ $USE_RATE -ge 80 ]; then echo "Warning: $PART_NAME Partition usage $USE_RATE%!" fi done done
14.9 检查网站可用性
1)检查URL可用性

浙公网安备 33010602011771号