在解释shell脚本这个名词之前,我们先来说下什么是shell
1. 什么是shell
shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即得到shell的回应),或非交互(脚本)的方式。
下面的图中黄色部分就是命令解释器shell处于的操作系统中的位置。
提示:
shell英文是贝壳的意思,从上图我们可以看出,命令解释器shell就像一个贝壳一样包住了系统核心。
2. 什么是shell脚本
当linux命令或语句不在命令行下执行(严格说,命令行也是shell),而是通过一程序文件执行时,该程序就被称为shell脚本或shell程序,shell程序很类似dos系统下的批处理程序(扩展名*.bat)。用户可以在shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机的结合起来就形成了一个功能强大的shell脚本。
举例:
范例一:清除/var/log下messages日志文件的简单命令脚本
把所有命令放在一个文件里堆积起来形成了脚本,下面就是一个最简单的命令堆积形成的shell脚本。
#要使用root身份来运行这个脚本。
#清除日志脚本,版本1
cd /var/log
cat /dev/null >messages
echo "logs cleaned up."
提示:/var/log/messages 是系统的日志文件,很重要
看完这个脚本大家有什么想法?
①. 上面的脚本,如果不是root就无法执行清理日志。
②. 没有任何的流程控制语句,简单的说就是顺序操作,没有成功判断和逻辑性。
范例二:包含命令、变量和流程控制语句的清除/var/log下messages日志文件的shell脚本。
[root@1-241 scripts]# vim messages.sh
[root@1-241 scripts]# cat messages.sh
#!/bin/sh
#清空日志脚本
LOG_DIR=/var/log
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "must be root to run this scripts."
exit 1
fi
cd $LOG_DIR || {
echo "cannot change to necessary directory." >&2
exit 1
}
cat /dev/null > messages && echo "log cleaned UP."
exit 0
拓展:清空日志及文件内容的三种方法:
[root@1-241 scripts]# echo >/var/log/nginx/ccs_access.log
[root@1-241 scripts]# >/var/log/nginx/ccs_access.log
[root@1-241 scripts]# cat /dev/null >/var/log/nginx/ccs_access.log