shell脚本的基础

  • Shell脚本(shell script)就是将要执行的命令按顺序保存到一个文本文件,并给该文件可执行权限,方便一次性执行的一个程序文件。
  • #date;who 中间的;号表示即使第一个命令执行失败,依然会执行下一条命令。而date&make &表示第一个命令执行成功后才可以执行下一个命令。
  • 通过/etc/shells文件可以知道当前系统所支持的shell种类。
  • 创建一个shell脚本文件



date命令

  • %H : 小时(00-23) %M : 分钟(00-59) %S : 秒(00-59)% %X : 相当于 %H:%M:%S %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %d : 日 (01-31) %m : 月份 (01-12) %y : 年份的最后两位数字 (00.99) %Y : 完整年份 (0000-9999)


命令解释器

  • shell脚本格式 SHELL脚本的第一行以 #! ,后面的路径名称是命令解释器。#!/bin/bash 作用:告诉脚本使用的是哪种命令解释器,此行以后的语句通过/bin/bash程序来解释执行。 shell程序一般以.sh结尾,当然主要是看是否为执行,然后看里面有没有#!
  • 脚本执行方式 通过命令解释器执行脚本:bash test.sh 或 sh test.sh 1、可以对脚本文件不添加执行权限。2、通过命令解释器执行脚本,会开启一个新的子shell,脚本在子shell环境中解释执行,执行完毕后退出子shell


这时当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常使用的方法,或者脚本文件开头没有指定解释器时需要使用的方法。

  • 路径下执行脚本 /root/test.sh 或 ./test.sh (当前路径下执行脚本,文件要有执行权限的) 1、脚本文件必须添加执行权限。2、通过脚本路径方式执行脚本,会开启一个新的子shell,脚本在子shell环境中解释执行,执行完毕后退出子shell
  • source script-name或 . script-name source或者“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。


  • 创建shell脚本的步骤 1、写脚本(包含基本的命令和控制语句等) 2、检测语法错误 3、添加执行权限 4、执行

管道与重定向

  • 管道操作 管道操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象)。同一行命令中可以使用多个管道


  • 重定向操作 标准输入(STDIN):默认的设备是键盘,文件编号为0 标准输出(STDOUT):默认的设备是显示器,文件编号为1 标准错误(STDERR):默认的设备是显示器,文件编号为2
  • 重定向输入 重定向输入指的是将命令中接收输入的途径由默认的键盘改为指定的文件,而不是等待从键盘输入。重定向输入使用“<”操作符。
  • 重定向输出 重定向输出指的是将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上,重定向输出使用“>”或“>>”操作符号,分别用于将前面的命令的输出结果保存到该文件中;若目标文件已存在,则将输出结果覆盖或追加到文件中。
  • 错误重定向 错误重定向指的是将执行命令过程中出现的错误信息保存到指定的文件,而不是直接显示在屏幕上。错误重定向使用“2>”或“2>>”操作符,其中2是指错误文件的编号(在使用标准输出、输入重定向时,实际上是省略了1、0编号)。 使用“2>”操作符时,会像使用“>”操作符一样覆盖目标文件的内容,若要追加内容而不是覆盖文件,应改为用“2>>”操作符。 当命令输出的结果可能既包括标准输出(正常执行)信息,又包括错误输出信息时,可以使用操作符“>”“>>”将两类输出信息分别保存到不同的文件,也可以使用“&>”操作符将两类输出信息保存到同一个文件。




  • [root@web01 ~]# tar zcf /backup/etc.tgz /etc/ > error.log 2>error.log [root@web01 ~]# tar zcf /backup/etc.tgz /etc/ &> error.log [root@web01 ~]# tar zcf /backup/etc.tgz /etc/ >error.log 2>&1

shell变量

  • 变量的设置规则: 1、变量名称通常是大写字母,它可以由数字、字母(大小写)和下划线_组成。变量名区分大小写;但是大家要注意变量名称不能以数字开头 2、等号 = 用于为变量分配值,在使用过程中等号两边不能有空格 3、变量存储的数据类型是整数值和字符串值 4、在对变量赋于字符串值时,建议大家用引号将其括起来,需要使用单引号或双引号。 5、要对变量进行调用,可以在变量名称前加美元符号shell脚本的基础_重定向变量名”或用${变量名}包含。
  • BASH SHELL的扩展功能
    1、shell脚本的基础_重定向_02{name}的简化版本,但是在某些情况下,还必须使用花括号引起的方式来消除歧义并避免意外的结果。
    2、命令的替换就是将执行某个命令的输出结果赋值给变量或作为另一个命令的处理对象(命令嵌套)。