在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块。虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好!
也有很多做运维很多年的朋友也是如此,Shell脚本一直写的不6!在网上看例子能照猫画虎写出来,完全独立写就困难了。对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验。
针对以上问题,总结了30个生产环境中经典的Shell脚本,通过这些需求案例,希望能帮助大家提升Shell编写思路,掌握编写技巧。
先了解下编写Shell过程中注意事项:
开头加解释器:#!/bin/bash
语法缩进,使用四个空格;多加注释说明。
命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。
默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。
有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。
写脚本一定先测试再到生产上。
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效验和统计字节
2、定义一个颜色输出字符串函数
方法1:function echo_color() {
if [ $1 == "green" ]; thenecho -e "\033[32;40m$2\033[0m"elif [ $1 == "red" ]; thenecho -e "\033[31;40m$2\033[0m"fi
}
方法2:function echo_color() {
case $1 in
green)echo -e "[32;40m$2[0m"
;;
red)echo -e "[31;40m$2[0m"
;;
*) echo "Example: echo_color red string"esac
}
使用方法:echo_color green "test"
function关键字定义一个函数,可加或不加。
3、批量创建用户