Shell介绍
shell是一个用c编写的程序,是用户和系统内核交互的工具。它既是一种命令语言也是一种解释性的编程语言。
Shell的功能
1. 命令行解释功能。解析命令行中输入的命令。比如ls,cp,df等等。
2. shell编程,可以开发一些自动化的小工具。比如系统中很多启动脚本就是用shell开发的。
3. 变量维护。比如打印当前用户echo $USER。
4. 启动程序,比如启动Apache,nginx等。
5. 输入输出重定向。
Shell脚本
定义:
shell脚本就是将完成一个任务的所有命令按照执行的顺序,自上而下写入到一个文本文件中,然后给予可执行权限。
脚本书写规范
1. shell脚本文件命名不要用无意义的字母或者数字,要见名之意。文件扩展名用.sh结尾。文件名总长度最好不要超过30个字符。
2. 脚本开头第一行定义脚本执行环境,如 #!/bin/bash 或者 #!/bin/sh,前面#!这个称之为幻数,后面跟的是解释此脚本的shell的路径,内核会根据它来决定用哪个程序来执行。默认是用bash来解释。
3. 脚本开头要写一些必要的脚本注释信息,就是该脚本的作用,如果没有注释会很难理解脚本的功能,只能通读一遍代码,这样会浪费很多宝贵时间。下面是一个例子。
#Author :songguojun #Created at : 2019-10-10 #Release : 1.0 #Script Description: nginx install
Shell脚本实际案例
1.检查主机存活状态
#!/bin/bash IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2" for IP in $IP_LIST; do NUM=1 while [ $NUM -le 3 ]; do if ping -w 2 $IP > /dev/null; then #设置两秒超时时间 echo "$IP Ping is successful." break else # echo "$IP Ping is failure $NUM" FAIL_COUNT[$NUM]=$IP let NUM++ fi done if [ ${#FAIL_COUNT[*]} -eq 3 ];then echo "${FAIL_COUNT[1]} Ping is failure!" unset FAIL_COUNT[*] fi done
2.遍历两个时间段并动态修改时间
#!/bin/bash #用法 : sh time.sh 2019-01-01 2020-01-01
EXPORT_START_DATE=$1 EXPORT_END_DATE=$2 date -s "$EXPORT_START_DATE" > /dev/null i=$EXPORT_START_DATE while [[ $i < `date -d "+1 day $EXPORT_END_DATE" +%Y%m%d` ]] do
echo $i i=`date -d "+1 day $i" +%Y-%m-%d` done