在解释Shell脚本这个名词之前,我们先来看看到底什么是shell?
什么是Shell ?
shell是一个命令解释器,它的作用就是负责解释执行用户输入的每条命令及应用程序等,用户每输入一条命令,Shell就去解释执
行一条。这种从键盘一输入命令,就可以立即得到回应的对话方式,我们称之为交互的方式。
shell存在于操作系统的最外层,负责与用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,
然后输出到屏幕返回给用户。输入系统用户名和密码并登录到Linux后的所有操作都是由shell解释执行的。
下面给出针对命令解释器shell在操作系统中所处的位置基本图解:

提示:shell的英文是贝壳的意思,从上图中就可以看出,命令解释器(shell)就像贝壳一样包住了系统的核心。
什么是Shell脚本?
理解了shell之后,再理解shell脚本就简单了。当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序就
被称之为shell脚本。如果在shell脚本里内置了很多条命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件
执行脚本的方式称为非交互式的方式。
shell脚本类似于DOS系统下的批处理程序(早期扩展名一般为“*.bat”)。用户可以在shell脚本中敲入一系列的命令及命令语句
组合。这些命令、变量和流程控制语句等有机地结合起来,就形成了一个功能强大的shell脚本。
例如:清除/var/log下messages日志文件的简单命令脚本
把所有的命令放在一个文件里,堆积起来后就形成了脚本,下面就是一个由最简单的命令堆积而成的shell脚本,需要注意的是,
必须使用root身份来运行这个脚本。
#清除日志脚本
cd /var/log
cat /dev/null>messages
echo "Logs cleaned up."
提示:/var/log/messages是Linux系统的日志文件,很重要。
上述的脚本其实是有一些问题的,那么问题来了:
(1.)如果不是root用户,则无法执行脚本清理日志,并且会提示系统的权限报错信息。
(2.)没有任何流程控制语句,简单地说就是只是进行顺序操作,没有成功判断和逻辑严密性。
例如:下面的这个脚本是不是就会更加觉得像一个真正的脚本了呢?
#!/bin/bash
LOG_DIR=/var/log
UID_ROOT=0
if [ "$UID" -ne $UID_ROOT ] #判断如果不是root用户执行,则给出相应的提示
then
echo "对不起,您不是root用户,请使用root用户执行"
exit 1
fi
#判断切换目录是否成功,如果不成则给出相应的提示
cd $LOG_DIR || {
echo "对不起,请切换到指定的目录去执行"
exit 1
}
cat /dev/null>messages &&{ #开始清空日志并输出执行结果信息
echo "清空日志成功!!!"
exit 0
}
#否则提示清空日志失败
echo "清空日志失败!!!!"
exit 1

执行结果:

Shell脚本在Linux运维工作中的地位?
shell脚本语言很适合用于处理纯文本类型的数据,而Linux系统中几乎所有的配置文件,日志文件(如NFS、Rsync、Httpd、
Nginx、LVS、MySQL、Apache)等,以及绝大对数的启动文件都是纯文本类型的文件。
因此,学好shell脚本语言,就可以利用它在Linux系统中发挥巨大的作用。
Shell脚本语言的种类?
shell脚本语言是弱类型语言(无须定义变量的类型即可使用),在Unix/Linux中主要有两大类shell:
一类是Bourne shell,另一类是 C shell
(1.)Bourne shell
Bourne shell又包括Bourne shell(sh)、Korn shell(ksh)、Bourne Again Shell(bash)三种类型。
Bourne shell(sh):由AT&T的Steve Bourne开发,是标准的UNIX Shell,很多UNIX系统都配有sh。
Korn shell(ksh):由David Korn开发,是Bourne shell(sh)的超集合,并且添加了csh引入的新功能,是目前很多UNIX系
统标准配置的Shell,这些系统上的/bin/sh往往指向/bin/ksh的符号链接。
Bourne Again Shell(bash):由GNU项目组开发,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和
ksh借鉴了很多功能,是各种Linux发行版默认配置的shell,Linux系统上的/bin/sh往往是指向/bin/bash的符号链接。尽管如
此,bash和sh还是有很多的不同之处;一方面,bash扩展了一些命令和参数;另一方面,bash并不完全和sh兼容,它们有些行
为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用bash替代sh。
(2.)C shell
C shell又包括csh、tcsh两种类型。
csh由Berkeley大学开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne shell所不支持的功能
例如:作业控制、别名、系统算术、命令历史、命令行编辑等。
tsch是csh的增强版,加入了命令补全等功能,在FreeBSD、Mac OS X 等系统上替代了csh。
以上介绍的这些shell中,较为通用的是标准的Bourne shell(sh)和C shell(csh)。
其中Bourne shell(sh)已经被Bourne Again shell(bash)所取代。
可通过以下命令查看centos7/6系统的Shell支持情况。
cat /etc/shells
结果:

提示:Linux系统中的主流shell是bash,bash是由Bourne shell(sh)发展而来的,同时bash还包含了csh和ksh的特
色,但大多数脚本都可以不加修改地在sh上运行,如果使用了sh后发现结果和预期有差异,那么可以尝试使用bash替代sh。
其他常用的脚本语言种类?
1.PHP语言

PHP是网页程序语言,也是脚本语言。它是一款更专注于web页面开发(前端展示)的语言,例如:WordPress、dedecms、
discuz等著名的开源产品都是用PHP语言开发的。用PHP程序语言也可以处理系统日志、配置文件等,还可以调用Linux系统命
令,但是很少有人这么用。
2.Perl语言

Perl脚本语言比Shell脚本语言强大很多,在2010年以前很流行,它的语法灵活、复杂,在实现不同的功能时可以用多种不同的
方式,缺点是不易读,团队协作困难,但它仍不失为一种很好的脚本语言,存世大量相关程序软件(比如,xtrabackup热备工
具、MySQL MHA集群高可用软件等)中都有Perl语言的身影。当下的Linux运维人员几乎不需要了解Perl语言了,最多可了解
一下Perl语言的安装环境。当然了想要二次开发用Perl编写软件人员例外,Perl语言已经成为历史了。
3.Python语言

Python是近几年非常流行的语言,它不但可以用于脚本程序开发,也可以实现web页面程序开发(例如:CMDB管理系统),甚
至还可以实现软件的开发(例如:大名鼎鼎的OpenStack、Saltstack都是Python语言开发的)、游戏开发、大数据开发、移动
端开发。现在越来越多的公司都要求运维人员会Python自动化开发,Python语言目前是全球第四大开发语言,未来的发展前景
很好,每一个运维人员在掌握了shell编程之后,都应该深入学习Python语言,以提升职场竞争力。
Shell脚本语言的优势?
shell脚本语言的优势在于处理偏操作系统底层的业务,例如:Linux系统内部的很多应用(有的是应用的一部分)都是使用shell
脚本语言开发的,因为有1000多个Linux系统命令为它做支撑,特别是Linux正则表达式及三剑客grep、awk、sed等命令。
对于一些常见的系统脚本,使用shell开发会更简单、更快速,例如:让软件一键自动化安装、优化,监控报警脚本,软件启动脚
本、日志分析脚本等,虽然PHP/Python语言也能够做到这些,但是,考虑到掌握难度、开发效率、开发习惯等因素,它们可能
就不如shell脚本语言流行及有优势了。
对于一些常规的业务应用,使用shell更符合Linux运维简单、易用、高效的三大基本原则。
PHP语言的优势在于小型网站系统的开发;Python语言的优势在于开发较复杂的运维工具软件、web界面的管理工具和web业务
的开发(例如:CMDB自动化运维平台、跳板机、批量管理软件Saltstack、云计算OpenStack软件)等。我们在开发一个应用
时应根据业务需求,结合不同语言的优势及自身擅长的语言来选择,扬长避短,从而达到高效开发及易于自身维护等目的。
常用操作系统默认的Shell
在常用的操作系统中,Linux下默认的shell是Bourne Again shell(bash);Solaris和FreeBSD下默认的是Bourne
shell(sh);AIX下默认的是Korn Shell(ksh)。
这里重点讲Linux系统环境下的Bourne Again shell(bash)。
通过以下两种方法可以查看Centos Linux系统默认的Shell。
方法1:
[root@kang ~]# echo $SHELL
/bin/bash
效果:

方法2:
[root@kang ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
效果:

提示:结尾的/bin/bash就是用户登录后的shell解释器。
Shell脚本的建立和执行
在Linux系统中,shell脚本(bash shell程序)同常是在编辑器vi/vim中编写的,由UNIX/Linux命令、bash shell命令、程序结
构控制语句和注释等内容组成。这里推荐用Linux自带的功能更强大的vim编辑器来编写,可以事先做一个别名alias vi='vim',并
使其生永久生效,这样以后习惯输入vi的读者也就可以直接调用vim编辑器了,设置方法如下:
[root@kang ~]# echo "alias vi='vim'" >>/etc/profile
[root@kang ~]# tail -1 /etc/profile
alias vi='vim'
[root@kang ~]# source /etc/profile
效果:

1.脚本开头(第一行)
一个规范的shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:
#!/bin/bash
或
#!/bin/sh #<==255个字节以内。
其中,开头的“#!”字符又称为幻数(其实叫什么都无所谓,知道它的作用就好),在执行bash脚本的时候,内核会根
据“#!”后的解释器来确定该用哪个程序解释这个脚本中的内容。
注意:这一行必须位于每个脚本顶端的第一行,如果不是第一行则为脚本注释行。例如下面的例子。
[root@kang ~]# cat test.sh
#!/bin/bash
echo "blxh start"
#!/bin/bash #<==写到这里就是注释了
#!/bin/sh #<==写到这里就是注释了
echo "blxh end"
效果:

2.bash与sh的区别
早期的bash与sh稍有不同,它还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在sh上运行,比如:
[root@kang ~]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 3月 11 18:43 /bin/sh -> bash
[root@kang ~]# ll /bin/bash
-rwxr-xr-x. 1 root root 964608 10月 31 01:07 /bin/bash
[root@kang ~]#
效果:

提示:sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写
法是在脚本的开头使用“#!/bin/bash”。
下面的shell脚本是系统自带的软件启动脚本的开头部分。
[root@kang ~]# head -1 /etc/init.d/network
#! /bin/bash
[root@kang ~]# head -1 /etc/init.d/netconsole
#!/bin/bash
[root@kang ~]#
效果:

提示:如果使用/bin/sh执行脚本出现异常,那么可以再使用/bin/bash试一试,但是一般不会发生此类情况。
一般情况下,在安装Linux系统时会自动安装好bash软件,查看系统的bash版本的命令如下。
[root@kang ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) #<==这里显示的是作者写作的Linux环境版本。
[root@kang ~]# bash --version
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) #<==这里显示的是bash的版本
Copyright (C) 2011 Free Software Foundation, Inc.
#<==下面几行是自由软件提示的相关信息。
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>
这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.
[root@kang ~]#
效果:

如果读者使用的是较老的版本shell,那么建议将其升级到最新版本的shell,特别是企业使用,因为近两年老版本的bash被暴露
出存在较严重的安全漏洞。
例如:bash软件曾经爆出了严重漏洞(破壳漏洞),凭借此漏洞,攻击者可能会接管计算机的整个操作系统,得以访问各种系统
内的机密信息,并对系统进行更改等。任何人的计算机系统,如果使用了bash软件,都需要立即打上补丁。检测系统是否存在漏
洞的方法为:
[root@kang ~]# env x='() { :; }; echo be careful' bash -c "echo this is a test"
this is a test
[root@kang ~]#
效果:

如果返回如下两行,则表示需要尽快升级bash了,不过,仅仅是用于学习和测试就无所谓了。
be careful
this is a test
升级方法为:
[root@kang ~]# yum -y update bash
[root@kang ~]# rpm -qa bash
bash-4.2.46-31.el7.x86_64
[root@kang ~]#
效果:

提示:如果没有输出be careful,则不需要升级。
下面是Linux中常用脚本开头的写法,不同语言的脚本在开头一般都要加上如下标识内容:
#!/bin/sh
#!/bin/bash
#!/usr/bin/awk
#!/bin/sed
#!/usr/bin/tcl
#!/usr/bin/expect #<==expect解决交互式的语言开头解释器
#!/usr/bin/perl #<==perl语言解释器
#!/usr/bin/env python #<==python语言解释器
效果:

centos和Red Hat Linux下默认的Shell均为bash。因此,在写shell脚本的时候,脚本的开头即使不加“#!/bin/bash”,它也会
交给bash解释。如果写脚本不希望使用系统默认的shell解释,那么就必须要指定解释器了,否则脚本文件执行后的结果可能就
不是你所要的。建议读者养成好的编程习惯,不管采用什么脚本,最后都加上相应的开头解释器语言标识,遵守shell编程规范。
如果在脚本开头的第一行不指定解释器,那么就要用对应的解释器来执行脚本,这样才能确保脚本正确执行。例如:
如果是shell脚本,就用bash test.sh执行test.sh。
如果是Python脚本,就用Python test.py执行test.py。
如果是expect脚本,就用expect test.exp执行test.exp。
3.脚本注释
在shell脚本中,跟在#后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被当作程序来执行,仅仅是给开发者和使
用者看的,系统解释器是看不到的,更不会执行。注释可自成一行,也可以跟在脚本命令的后面与命令行在同一行。开发脚本
时,如果没有注释,那么团队里的其他人就会很难理解脚本对应内容的用途,而且若时间长了,自己也会忘记。因此,我们要尽
量养成为所开发的shell脚本书写关键注释的习惯,书写注释不光是为了方便别人,更是为了方便自己,避免影响团队协作的效
率,以及给后来接受的人带来维护困难。特别提示一下,注释尽量不要用中文,在脚本中最好也不要有中文。
Shell脚本的执行
当shell脚本运行时,它会先查找系统环境变量ENV,该变量指定了环境文件(加载顺序通常是/etc/profile、~/.bash_profile、
~/.bashrc、/etc/bashrc)等,在加载了上述环境变量文件后,shell就开始执行shell脚本中的内容(更多shell加载环境变量的
知识再接下来的日子里,薄凉小伙会持续输出相关知识的,请大家放心,多多关注即可!!!)。
shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在shell脚本中遇
到子脚本(即嵌套脚本)时,就会先执行子脚本的内容,完成后再返回父脚本,继续执行父脚本内,后续的命令及语句。
通常情况下,在执行shell脚本时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子shell脚本,基本
流程如下图所示:

特殊技巧:设置Linux的crond任务时,最好能在定时任务脚本中重新定义系统环境变量,否则,一些系统环境变量将不会被加载,这个问题需要注意!!!
shell脚本的执行通常可以采用以下几种方式。
(1.)bash script-name或sh script-name:这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常用的方法,
或者脚本文件开头没有指定解释器时需要使用的方法。
(2.)path/script-name或./script-name:指在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限改为可执
行(即文件权限属性加x位),具体方法为chmod+x script-name。然后通过脚本绝对路径或相对路径就可以直接执行脚本了。
在企业生产环境中,不少运维人员在写完shell脚本之后,由于忘记为脚本设置执行权限,然后就直接应用了,结果导致脚本没有
按照自己的意愿手动或定时执行,对于这一点,避免出现该问题的方法就是用第一种方法替代第二种。
(3.)source script-name或 . script-name:这种方法通常是使用source或 “.”(点号)读入或加载指定的shell脚本文件(如
san.sh),然后,依次执行指定的shell脚本文件san.sh中的所有语句。这些语句将在当前父shell脚本father.sh进程中运行(其
他几种模式都会启动新的进程执行子脚本)。因此,使用source或“.”可以将san.sh自身脚本中的变量值或函数等的返回值传递
到当前父shell脚本father.sh中使用。这是它和其他几种方法最大的区别,也是值得读者特别注意的地方。
source或“.” 命令的功能是:在当前shell中执行source或“.”加载并执行的相关脚本文件中的命令及语句,而不是产生一个子
shell来执行文件中的命令。注意“.”和后面的脚本名之间要有空格。
如果读者学过PHP开发就会明白,source或“.”相当于include的功能。HTTP服务软件Apache、Nginx等配置文件里都支持这样
的用法。
(4.)sh<script-name或cat script-name|sh:同样适用于bash,不过这种用法不是很常见,但有时也可以有出奇制胜的效果,
例如:不用循环语句来实现精简开机自启动服务,就是通过将所有字符串拼接为命令的形式,然后交由管道交给bash操作。
创建模拟脚本test.sh,并输入如下内容:
[root@kang ~]# cat >test.sh
echo 'I am blxh'
输入“echo 'I am blxh'”内容后按回车键,然后在按Ctrl+d组合键结束编辑。此操作为特殊编辑方法,这里作为cat用法的扩展知
识(通过使用来记忆是个好习惯)。
现在使用第1种方法实践,命令如下:
[root@kang ~]# cat test.sh
echo 'I am blxh'
[root@kang ~]# sh test.sh #<==使用第1种方式的sh命令执行test.sh脚本文件。
I am blxh
[root@kang ~]# bash test.sh #<==使用第1种方式的bash命令执行test.sh脚本文件。
I am blxh
[root@kang ~]#
这里使用第1种方法的bash和sh,均可以执行脚本并得到预期的结果。
使用第2种方法实践,命令如下:
[root@kang ~]# ls -l test.sh
-rw-r--r--. 1 root root 17 4月 6 23:00 test.sh
[root@kang ~]# ./test.sh #<===使用第2种方式“./”在当前目录下执行test.sh脚本文件,细心的读者可以发现,这个地方无法自动补全,这是因为没有权限所导致的。
bash: ./test.sh: 权限不够 #<===提示:强制执行会提示权限拒绝,此处是因为没有执行权限。
[root@kang ~]#
虽然没有权限的test.sh脚本不能直接被执行,但是可以用source或“.”(点号)来执行,如下:
[root@kang ~]# . test.sh #<===请注意开头的“.”后面有空格。
I am blxh
[root@kang ~]# source test.sh
I am blxh
[root@kang ~]#
提示:“.”或source命令的功能相同,都是读入脚本并执行脚本。
给test.sh脚本添加可执行权限,命令如下:
[root@kang ~]# chmod +x test.sh
[root@kang ~]# ./test.sh
I am blxh
[root@kang ~]#
可以看到,给test.sh加完可执行权限后就能执行了。前面也提到了,这种方法在使用前每次都需要给定执行权限,但容易被忘
记,且多了一些步骤,增加了复杂性。
使用第3种方法实践时,会将source或“.”执行的脚本中的变量值传递到当前的shell中,如下:
[root@kang ~]# echo 'userdir=`pwd`' >testsource.sh #<==第一行的内容通常用echo处理更方便
[root@kang ~]# cat testsource.sh
userdir=`pwd` #<===定义了一个命令变量,内容是打印当前路径。注意,打印命令用反引号
[root@kang ~]# sh testsource.sh #<==采用sh命令执行脚本
[root@kang ~]# echo $userdir
#<===此处为空,并没有出现当前路径的输出,这是为什么?
[root@kang ~]#
根据上面的例子可以发现,通过sh或bash命令执行过的脚本,若在脚本结束之后,在当前shell窗口中查看userdir变量的值,会
发现值是空的。现在以同样的步骤改用source或“.”执行,然后再看看userdir变量的值:
[root@kang ~]# source testsource.sh
[root@kang ~]# echo $userdir
/root #<====此处输出了当前路径/root,这又是为什么呢?
[root@kang ~]#
那么到这里通过上面两个案例所带来的疑问,现在正是通过结论来解答一下。
结论:
通过source或“.”加载执行过的脚本,由于是在当前shell中执行脚本,因此在脚本结束之后,脚本中的变量(包括函数)值在当
前shell中依然存在,而sh和bash执行脚本都会启动新的子shell执行,执行完后退回到父shell。因此,变量(包括函数)值等无
法保留。在进行shell脚本开发时,如果脚本中有引用或执行其他脚本的内容或配置文件的需求时,最好用“.”或source先加载该
脚本或配置文件,处理完之后,再将它们加载到脚本的下面,就可以调用source加载的脚本及配置文件中的变量及函数等内容
了。
以下采用第4种方法来实践:
[root@kang ~]# ls -l blxh.sh
-rw-r--r--. 1 root root 26 4月 6 23:41 blxh.sh
[root@kang ~]# cat blxh.sh
echo "I am is blxh csdn "
[root@kang ~]# sh<blxh.sh #<==尽量不要使用这种方法
I am is blxh csdn
[root@kang ~]# cat blxh.sh|bash #<===这种方法在命令行拼接字符串命令后,需要执行时就会用到。
I am is blxh csdn
[root@kang ~]#
提示:代码中提到的两种执行方法相当于sh script-name,效率很高,但是初学者用得少。
Shell脚本开发的基本规范及习惯
Shell脚本开发规范及习惯非常重要,虽然这些规范不是必须要遵守的,但有了好的规范和习惯,可以大大提示开发效率,并能在
后期降低对脚本的维护成本。当多人协作开发时,大家有一个互相遵守的规范就显得更重要了。即使只是一个人开发,最好也采
取一套固定的规范,这样脚本将会更易读、更易于后期维护,最重要的是要让自己养成一个一出手就很专业和规范的习惯。下面
来看看都有哪些规范,这些规范在以后的博客中也会提及,以便于大家进一步巩固。
(1.)shell脚本的第一行是指定脚本解释器,通常为:
#!/bin/bash
或
#!/bin/sh
(2.)shell脚本的开头会加版本、版权、作者等信息:
#!/bin/bash #bash解释器信息
#Date 23:56 2019-4-06 #时间信息
#Author:Created by blxh #作者信息
#csdn:http://blxh.net.csdn. #博客网址信息
#Description:This is a first script functions is blxh #描述信息
#version:1.1 #版本信息
可修改“~/.vimrc”配置文件配置vim编辑文件时自动加上以上信息的功能。
(3.)在shell脚本中尽量不用中文(不限于注释)。
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰。如果非要加中文,请根据自身的客户端对系统进行字符集调整,
如:export LANG=“zh_CN.UTF-8”,并在脚本中,重新定义字符集设置,和系统保持一致。
(4.)shell脚本的命名以.sh为扩展名。
例如:script-name.sh
(5.)shell脚本应存放在固定的路径下。
例如:/server/scripts
以下则是shell脚本代码书写的良好习惯。
(1.)成对的符号应尽量一次性写出来,然后退格在符号里增加内容,以防止遗漏。
这些成对的符号包括:
{}、[]、''、""
(2.)中括号([])两端至少要有1个空格,因此,键入中括号时即可留出空格[],然后在退格键入中间的内容,并确保两端都至
少有一个空格,即先键入一对中括号,然后退1格,输入两个空格,再退1格,双中括号([[]])的写法也是如此。
(3.)对于流程控制语句,应一次性将格式写完,再添加内容。
比如,一次性完成if语句的格式,应为:
if 条件内容
then
内容
fi
一次性完成for循环语句的格式,应为:
for 变量名 取值列表
do
内容
done
提示:while和until,case等语句也是一样。
(4.)通过缩进让代码更易读,比如:
if 条件内容
then
内容
fi
(5.)对于常规变量的字符串定义变量值应加双引号,并且等号前后不能有空格,需要强引用的(指所见即所得的字符引用),
则用单引号(''),如果是命令的引用,则用反引号(``)。例如:
BLXH_FILE="test.txt"
(6.)脚本中的单引号、双引号及反引号必须为英文状态下的符号,其实所有的Linux字符及符号都应该是英文状态下的符号,
这点需要特别注意。
说明:好的习惯可以让我们避免很多不必要的麻烦,提升工作效率。
有关于shell开发规范及习惯的更多内容,在以后的博客中也会继续有所体会,好的今天就先到这里吧,再次说明一下不要觉得这
些都是基础,如果能够把这些都用心掌握记住了,相信在工作中会有事半功倍的效果,最后希望能够对你有所帮助!!!
谢谢关注,再见!!!!


30万+

被折叠的 条评论
为什么被折叠?



