初识SHLL

一、什么是shell?

  1.     Shell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口。
  2.     当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理后让内核做出相应的动作。
  3.     系统的回应和输出的信息也由shell处理,然后显示在用户的屏幕上。

初识SHLL

二、什么是shell脚本?

  1. 简单的说,当命令或者程序不在命令行执行,而是通过一个程序文件来执行,这个程序就被称为shell脚本。
  2. 也就是在shell脚本里内置了多条命令,语句,循环控制,然后将这些命令一次性执行完毕,这种通过文件执行命令的方式称为非交互式。

三、为什么使用shell脚本?

  1.     适合处理操作系统底层的业务,有众多系统命令为其做支撑(还有文本处理三兄弟grep,sed,awk)。
  2.     适合处理纯文本文件,linux中许多服务配置文件,启动脚本,都是纯文本(httpd,nfs,mysql,nginx,lvs)。
  3.     linux系统脚本用shell开发更简单。

四、如何查看系统默认shell?(三种方式)

[[email protected] ~]# cat /etc/passwd | head -1 
root:x:0:0:root:/root:/bin/bash 
[[email protected] ~]# grep root /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin 
[[email protected] ~]# echo $SHELL 
/bin/bash 

初识SHLL

五、脚本的写法标准

    一个完整的shell脚本需要有以下几个部分:

  •     脚本名:最好以.sh结尾。
  •     第一行:#!/bin/bash
  •     指定解释器:由哪个程序来执行脚本内容。
  •     #!:幻数
  •     注意:#!/bin/bash必须写在第一行,否则会被认为是注释。
  •     有用户判断,否则任何用户都可以执行这个脚本。
  •     有流程控制,否则只是把简单的命令进行顺序操作,没有成功与否的判断。
  •     注释:可以命令后,也可以自成一行(方便自己也方便他人)。
#!/bin/bash 
#Date:20XX-XX-XX 
#Author:XXXXXXXX 
#Connect:[email protected] 
#Desc:This script is for... 
#Version:1.0 
LOG_UID=/var/log                ##指定环境变量 
ROOT_UID=0                      ##判断是否是超级用户 
if [ "$UID" -ne "$ROOT_UID" ];then
        echo "Error:you should be root to run this script" 
        exit 1
fi                              ##判断能否进入目录 
cd $LOD_DIR || {
        echo "Cannot access to directory." 
        exit 1
                 }
 cat /dev/null > messages && {
                echo "Logs cleaned up..." 
                exit 0
                                }
echo "Logs cleaned failed..." 
exit 1

初识SHLL

 六、 脚本执行方法

1.没有执行权限时

sh script.sh  或者  bash script.sh   

初识SHLL

2.path  /script.sh |   ./script(要在脚本的当前目录下)  注意:path是绝对路径,需要给脚本添加执行权限

初识SHLL

初识SHLL

3.source script.sh | . script.sh

[[email protected] ~]# vim user.sh
[[email protected] ~]# cat user.sh
#!/bin/bash
username=`whoami`
[[email protected] ~]# echo $username
                                            ##输出为空
[[email protected] ~]# source user.sh 
[[email protected] ~]# echo $username
root
  • 这种方式会使用source或.号来读如入指定shell文件,并会把其他shell中的变量值或函数返回给父shell继续使用
  • 前两种方式,在执行脚本的时候,会默认打开一个新的shell,而新shell的变量值和函数不会返回给父shell

初识SHLL