shell脚本简介

在解释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
原文地址:https://www.cnblogs.com/scajy/p/11281539.html