-->

《Linux就该这么学》第五节课,Shell命令脚本的学习

2020-02-27 12:33发布

4.2 编写Shell脚本

   Shell脚本命令分为两种,一是交互式,二是批处理式。

   查看SHELL变量来查看当前系统的终端解释器是什么。

[root@linuxprobe Desktop]# echo  $SHELL  $SHELL提取SHELL的变量值

/bin/bash                  bash表示系统是bash翻译器      

[root@linuxprobe Desktop]#  

1.脚本的结构:

 S1:创建一个脚本文件.sh,例如 Examp.sh

          vim Examp.sh

  S2 #!/bin/bash  (脚本声明)。 必须写,告诉系统终端使用哪种shell解释器来执行次脚本。

  S3:  #字符串 (脚本注释)。可以没有也可以有很多内容,对脚本的功能及某些参数进行说明。

 S4:命令。可以上下行进行叠加。

[root@linuxprobe Desktop]# vim EXamp.sh       在编辑器里写入                      

                                                #!/bin/bash

                                                # lizi

                                                   pwd

                                                   ls  -al

 

 [root@linuxprobe Desktop]# cat EXamp.sh

  #!/bin/bash

  # lizi

     pwd

     ls  -al

[root@linuxprobe Desktop]# bash EXamp.sh     在终端中运行

/root/Desktop

total 120

drwxr-xr-x.  3 root root  4096 Feb 22 09:25 .

dr-xr-x---. 14 root root  4096 Feb 22 09:25 ..

-rw-r--r--.  1 root root 20480 Feb 22 03:53 .1111.swo

-rw-r--r--.  1 root root 20480 Feb 22 03:52 .1111.swp

2.用户的参数

一个脚本分两步走,先接受用户的参数,然后对用户的参数进行判断 

   2.1接收用户参数

      参数与参数之间用空格间隔。

     $ :参数提取符,把后面变量的参数提取出来。

     $0: 提取当前脚本的名称

     $*: 提取所有变量的参数

     $#: 统计一共有多少个参数

     $?:上一个命令执行结果的返回值,0或者非0

     $1,3,5: 提取第一,三,五个参数  

 [root@linuxprobe Desktop]# vim EXamp.sh

 [root@linuxprobe Desktop]# cat EXamp.sh

  #!/bin/bash

  # lizi

  echo "$0"

  echo "$#,$*"

  echo "$ 1,3,5"

[root@linuxprobe Desktop]# bash EXamp.sh a b c d e f

EXamp.sh

6,a b c d e f

$ 1,3,5

 

2.2判断用户的参数

    系统在执行命令时会判断用户输入的信息是否正确合理,例如在运行mkdir命令创建空白目录时,要判断这个目录是否已经存在,如果存在那就会报错,不存在就会执行命令。

 

 

[root@linuxprobe Desktop]# ls

]  123~  1a1~  2a1~  A~  AbbA~  DD~  EXamp.sh  haha~  linux

[root@linuxprobe Desktop]# mkdir linux

mkdir: cannot create directory ‘linux’: File exists  报错目录已存在

[root@linuxprobe Desktop]# mkdir linux1

[root@linuxprobe Desktop]# ls

]  123~  1a1~  2a1~  A~  AbbA~  DD~  EXamp.sh  haha~  

linux  linux1                            linux1不存在就自动创建

 

 

     Shell脚本中的条件测试语法可以来判断条件表达式是否成立,若成立则返回数字0,否则返回非0数字。

     按照测试对象来划分。条件测试语句分为4中:

      1.文件测试语句      

      2.逻辑测试语句

      3.整数值比较语句

      4.字符串比较语句

       第4章 Vim编辑器与Shell命令脚本。第4章 Vim编辑器与Shell命令脚本。

    2.2.1文件测试语句:判断文件是否存在或权限是否满足等

     [ -d 文件A ]  判断文件A是否为目录类型

     [ -f 文件A ]  判断文件A是为一般文件

     [ -e 文件A ]  判断文件A是否存在

     [ -r 文件A ]  测试当前用户是否有权限读取

     [ -w 文件A ]  测试当前用户是否有权限写入

     [ -x 文件A ]  测试当前用户是否有权限执行

 

 

[root@linuxp Desktop]# pwd

/root/Desktop

[root@linux Desktop]# ls

]  123~  2a1~  A  A~  AbbA~  DD~  EXamp.sh  haha~  linux  linux1'

[root@linux Desktop]# [ -f /root/Desktop/A ]    -f判断A是否存在

[root@linux Desktop]# echo "$?"                      

      0                         $?提取上次命令返回值为0,命令语句成立

[root@linux Desktop]# [ -f /root/Desktop/linux ]

[root@linux Desktop]# echo "$?"      $?提取上次命令返回值为非0,说明  

      1                                linux不是一般文件

[root@linux Desktop]# [ -d /root/Desktop/linux ]

[root@linux Desktop]# echo "$?"   返回值为说明linux为目录类型

 

这个判断语句显得特别没效率,可以通过逻辑操作符简化成一条语句

椭圆形标注: 这个判断语句显得特别没效率,可以通过逻辑操作符简化成一条语句      0

 

 [root@linux Desktop]#

 

2.2.2逻辑测试语句:

 

[root@linux Desktop]# [ -f/root/Desktop/A ]

[root@linux Desktop]# echo "$?"

     0

    

  

 

   三个重要的逻辑操作符:

   1逻辑与 && :表示当前面的命令执行成功后再执行后面的命令

       命令A  &&  命令B   

   2逻辑或 || :当前面的命令执行失败时执行后面的命令

      命令A   ||  命令B

   3逻辑非 !非:表示取命令执行结果的相反值,取反值

 

[root@linux Desktop]# [ -e A ] && echo "Exist" || echo "NOexist"

      Exist

[root@linux Desktop]# [ -e 1A ] && echo "Exist" || echo "NOexist"

     NOexist

[root@linuxDesktop]#   文件A存在,[ ! -e A ]取反值表示失败,执行||

[root@linuxprobe Desktop]# [ ! -e A ] && echo "NOexsit" || echo "Exsit"

    Exsit

[root@linuxprobe Desktop]# [ ! -e 1A ] && echo "NOexsit" || echo "Exsit"

    NOexsit

 

[root@linux Desktop]# [ -e A ] && echo "Exist" || echo "NOexist"

      Exist

[root@linux Desktop]# [ -e 1A ] && echo "Exist" || echo "NOexist"

     NOexist

[root@linuxDeskt

 

 

 

2.2.3整数比较

   -eq:   是否等于 equal

   -gt:   是否大于 greater then

   -lt:    是否小于 less then

   -ge;    是否大于等于

   -le:    是否小于等于

本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值的Linux实验手册。章节包括有:

第0章 咱们先来谈谈学习方法和红帽系统。

第1章 部署虚拟环境安装linux系统。

第2章 新手必须掌握的Linux命令。

第3章 管道符、重定向与环境变量。

第4章 Vim编辑器与Shell命令脚本。

第5章 用户身份与文件权限。

第6章 存储结构与磁盘划分。

第7章 使用RAID与LVM磁盘阵列技术。

第8章 Iptables与Firewalld防火墙。

第9章 使用ssh服务管理远程主机。

第10章 使用Apache服务部署静态网站。

第11章 使用Vsftpd服务传输文件。

第12章 使用Samba或NFS实现文件共享。

第13章 使用Bind提供域名解析服务。

第14章 使用DHCP动态管理主机地址。

第15章 使用Postfix与Dovecot部署邮件系统

第16章 使用Squid部署代理缓存服务。

第17章 使用iSCSI服务部署网络存储。

第18章 使用MariaDB数据库管理系统。

第19章 使用PXE+Kickstart部署无人值守安装。

第20章 使用LNMP架构部署动态网站环境。

对Linux感兴趣的一定要加个收藏,在线学习网址是https://www.linuxprobe.com/chapter-00.html

附件:

Linux入门教程,https://www.linuxprobe.com/docs/LinuxProbe.pdf

Linux命令大全:https://www.linuxcool.com/

标签: