shell:脚本慨念介绍

1、shell脚本简介

  • 在解释shell脚本这个名词之前,我们先来说下什么是shell

    1.1、什么是shell

  • shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即得到shell的回应),或非交互(脚本)的方式。
  • 下面的图中×××部分就是命令解释器shell处于的操作系统中的位置。
    shell-脚本概念介绍01_第1张图片
    提示:
    • shell英文是贝壳的意思,从上图我们可以看出,命令解释器shell就像一个贝壳一样包住了系统核心。

2、什么是shell脚本

  • 当linux命令或语句不在命令行下执行(严格说,命令行也是shell),而是通过一程序文件执行时,该程序就被称为shell脚本或shell程序,shell程序很类似dos系统下的批处理程序(扩展名*.bat)。用户可以在shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机的结合起来就形成了一个功能强大的shell脚本。
    ###2.1、举例:

案例1、清除/var/log下messages日志文件的简单命令脚本

  • 把所有命令放在一个文件里堆积起来形成了脚本,下面就是一个最简单的命令堆积形成的shell脚本。
  • 要使用root身份来运行这个脚本。
  • 清除日志脚本,版本1

    cd  /var/log
    cat  /dev/null   >messages
    echo "logs  cleaned up."
    提示:/var/log/messages 是系统的日志文件,很重要

    看完这个脚本大家有什么想法?

    1. 上面的脚本,如果不是root就无法执行清理日志。
    2. 没有任何的流程控制语句,简单的说就是顺序操作,没有成功判断和逻辑性。

案例2:包含命令、变量和流程控制语句的清除/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