SHELL的基础知识介绍

1 什么是SHELL和SHELL脚本?

1.1 什么是shell:

 shell其实是一个命令解释器,它的作用是解释用户输入的命令和程序,命令和程序可以理解成我们图中的应用程序,我们linux系统中的那些命令其实也都是一个个的小程序,只不过完成的是系统的应用功能。我们在系统的终端中输入一条命令,可以立马看到一条或者几条系统回复我们的信息,其实就是shell在帮我们回复,所以shell可以称之为命令解释器。这种从键盘一输入命令,就可以立马得到相应的回复信息,叫作交互的方式,相当于我们在和电脑交流。Shell存在于系统的最外层,所以算作操作系统的外壳,它之外的应用程序就不能算作操作系统了。我们从输入系统的账户密码开始,到登录系统以后的所有操作都是shell在帮我们解释执行的。
 简单来说,shell也是操作系统中的一个软件,它包括在linux的外面,为用户和内核之间的交互提供了一个接口。系统中的命令用shell去解释,shell接收系统回应的输出并显示其到屏幕中。
 bash=GNU Bourne-Again Shell
在这里插入图片描述
1.2 shell脚本:

如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell脚本。Shell脚本里面通常内置了多条命令,有的还包含控制语句,比如if和else的条件控制语句,for和select的循环控制语句等。这些内置在一个shell脚本中的命令通常是一次性执行完成,不会不停的返回信息给用户,这种通过文件执行脚本的方式称之为非交互方式。Shell脚本类似于windows下的批处理,但是它比批处理要强大一些,现在windows下有一个叫做power shell的功能可以和linux下的shell功能媲美。
总结来说,
我们可以在文本中输入一系列的命令、控制语句和变量,这一切有机的结合起来就形成了功能强大的shell脚本。
 总结来说,脚本是一种解释性语言 (与它相对应还有描述型语言);用shell脚本保存执行动作;用脚本判定命令的执行条件;用脚本来实现动作的批量执行

2 SHELL脚本的规范与执行

2.1 shell脚本的规范:

 一个完整的shell脚本需要有以下几个部分:
1.脚本名:最好以.sh结尾
2.第一行:#!/bin/bash
指定解释器:由哪个程序来执行脚本内容
#!:幻数
注意:#!/bin/bash必须写在第一行,否则会被认为是注释
3.有用户判断,否则任何用户都可以执行这个脚本
4.有流程控制,否则只是把简单的命令进行顺序操作,没有成功与否的判断
5.注释:可以命令后,也可以自成一行(方便自己也方便他人)

2.2 如何创建一个简单的shell脚本:

vim script.sh  #用vim编写脚本
#!/bin/bash    #脚本使用的解释器,通常用幻数“#!”指定,正规的shell脚本需要为脚本添加注释
#Author        #脚本作者
#DATE          #创作时间
#MAIL          #脚本作者联系方式
#VERSION       #脚本的版本

*如何让让vim自动加注释?
vim /etc/vimrc
"map <F9> ms:call WESTOS()<cr>'s                       "表示注释,改条语句表示使用f9快捷键添加注释。
                                                        若不想使用快捷键,直接打开新的以sh结尾文件自动添加,使用下面一条命令
autocmd BufNewFile *.sh exec ":call WESTOS()"

function WESTOS()
	call append(0,"#############################")
        call append(1,"# Author:               #")
        call append(2,"# Create_Time:   ".strftime("%Y-%m-%d")."         #")
        call append(3,"# Version:              #")
        call append(4,"# Mail:                  #")
        call append(5,"# Description:           #")
        call append(6,"#                        #")
         call append(7,"#                       #")
         call append(8,"#########################")
         call append(9,"")
         call append(10,"#!/bin/bash")
endfunction

在这里插入图片描述
在这里插入图片描述

2.3 shell脚本的执行:

方式一:
cd /mnt
chmod +x test.sh
./test1.sh
./的意思是说在当前的工作目录下执行test1.sh。如果不加上./,bash可能会响应找到不到test1.sh的错误信息。

在这里插入图片描述

方式二:
以绝对路径的方式去执行bash shell脚本:
/mnt/test1.sh

在这里插入图片描述

方式三:直接使用bash 或sh 来执行bash shell脚本:
cd /mnt/
bash test1.sh
或
cd /mnt/
sh test1.sh

在这里插入图片描述

方式四:在当前的shell环境中执行bash shell脚本:
cd /mnt/
. test1.sh
或
cd /mnt/
source test1.sh

前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。
shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。

在这里插入图片描述
在这里插入图片描述

例如:怎么在当前shell中显示a的值
a=1
vim test.sh
#!/bin/bash
echo $a
source test.sh = . test.sh      source和.是在当前shell中执行的

在这里插入图片描述
2.4 shell脚本的调试:

脚本的调试:
sh -x script.sh   适用于所有shell脚本
vim script.sh    shell脚本必须有x权限
#!/bin.bash -x 

在这里插入图片描述
2.5 shell脚本的示例:

*)执行命令后可以清空日志

vim test.sh
#!/bin/bash
[ "$USER" = "root" ] || {
        echo "Error:this is script must run as root!!"
}
Max_Line=`sed -n '$=' /etc/rsyslog.conf`
Target_Log=`grep RULES /etc/rsyslog.conf -A Max_Line  | awk '!/^#/&&!/^$/{print $2}' | sed '/^:/d;s/-//g'`
for Log_file in $Target_Log
 do
      > $Log_file && {
                 echo $Log_File is cleared !!
        }
done

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值