BASH:主要的优势:shell
- 命令编修能力;
- 命令与文件补全功能;
- 命令别名设置功能;
- 工做控制、前景背景控制;
- 程序化脚本;
- 万用字符;
一、 让某一个特定的字符串表明不固定的内容。
二、 变量就是让一组文字或符号等来取代一些设置,或者是一串保留的数据。
三、变量的格式:变量名=变量内容(变量名通常设置为大写字母,专业一些)。centos
设置变量的规则:
一、 变量与变量内容以一个等号“=”来连接;
二、 等号两边不能直接接空白字符;
三、 变量名称只能是英文字母与数字,可是开头字符不能是数字;
四、 变量内容如有空白字符可使用双引号,或单引号讲变量内容结合起来。双引号内的特殊字符如$等,能够保有本来的特性;单引号内的特殊字符则仅做为通常字符(纯文本)。
五、 可用转义符“\”将特殊符号变成通常字符;
六、 在一串指令的执行中,还须要借由其余额外的指令所提供的信息时,可使用反撇号,而不是单引号。
七、 若该变量须要在其余子程序执行,则须要一export来使自定义变量变成环境变量。
八、 一般大写字符为系统默认变量,自行设置变量可使用小写字符,方便判断;
九、 取消变量的方法为使用unset: “unset 变量名称”例如取消myname的设置:unset myname。bash有关shell变量定义、赋值及变量输出加单引号、双引号、反引号与不加引号的简要说明,以下表所示:dom
建议:编辑器
在脚本中定义普通字符串变量时,应尽可能把变量的内容用双引号括起来;
单纯数字的变量内容能够不加引号;
但愿变量的内容原样输出时须要加单引号;
但愿变量值引用命令并获取命令的结果时就用反单引号或$( )。
env命令——查询环境变量。
random命令:随机产生的数字是在0——32768之间。ide
set命令:查询的是全部的变量,包括环境变量和自定义变量。函数
$:表明的是当前shell的PID号,如echo $$;测试
?:表明的是上一个指令的回传值,如echo $?命令行
自定义变量与环境变量最大的区别是:该变量是否会被子程序(子shell)继续使用。code
各类变量定义的做用域:
- 环境变量=全域变量
- 自定义变量=区域变量
关于系统中的环境变量解释:
PS1——系统特定变量名
其中PS1这个变量须要解释下,其余能够自行看懂,PS1可用的选项以下:
- \d :可显示出“星期月日”的日期格式,如:"Mon Feb 2"
- \H :完整的主机名称。举例来讲,个人练习机为“study.centos.vbird”
- \h :仅取主机名称在第一个小数点以前的名字,如我主机则为“study”后面省略
- \t :显示时间,为 24 小时格式的“HH:MM:SS”
- \T :显示时间,为 12 小时格式的“HH:MM:SS”
- \A :显示时间,为 24 小时格式的“HH:MM”
- \@ :显示时间,为 12 小时格式的“am/pm”样式
- \u :目前使用者的账号名称,如“dmtsai”;
- \v :BASH 的版本信息,如个人测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
- \w :完整的工做目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
- \W :利用 basename 函数取得工做目录名称,因此仅会列出最后一个目录名。
- #:下达的第几个指令。
- \$ :提示字符,若是是 root 时,提示字符为 # ,不然就是 $
用法示例:
[root@localhost ~]# PS1='[\u@\h\w\A#\#]\$' #添加上面的一些选项 [root@localhost~13:07#5]#cd /etc #多执行两下命令 [root@localhost/etc13:07#6]#cd /boot [root@localhost/boot13:07#7]#exit #能够发现,执行PS1这个变量并结合一些选项的使用,能够暂时改变命令提示符的变化, #而且后面的数字会每执行一次,就增长一个数,这是\#的做用
[root@localhost ~]# path=$PATH #先自定义一个变量,引用“PATH”的值,用“path”变量作测试 [root@localhost ~]# echo $path #输出进行确认下 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# echo ${path#/*local/sbin:} #试着删除一个 /usr/local/bin:/usr/sbin:/usr/bin:/root/bin #在上面的命令中,“$”是关键字,用在这种删除模式所必须存在的; #“path”就是本来的变量名称; #“#”表明从变量内容的最前面开始向右删除,且只删除最短的那个; #“/*local/sbin:”表明要被删除的部分,因为“#”表明从前面开始删除, #因此这里就从“/”写起,而且可使用“*”这个万用字符,能够表明任意内容。 #但这条命令并无改变“path”变量的内容,能够将“echo”换为“path=”便可直接改变变量内容。 #以下: [root@localhost ~]# path=${path#/*local/sbin:} [root@localhost ~]# echo $path /usr/local/bin:/usr/sbin:/usr/bin:/root/bin #这就将本来的变量值更改为功了。
示例1——测试一下是否存在username这个变量,若不存在则赋值username为root。
[root@localhost ~]# echo $username #查看username变量是否存在 [root@localhost ~]# username=${username-root} #若是变量内容不存在就赋值为root [root@localhost ~]# echo $username #变量不存在,因此将它赋值了root root [root@localhost ~]# username='lv jian zhao' #那么如今给它赋值 [root@localhost ~]# username=${username-root} #再次使用这个,表示若是值不存在,则将它赋值为root [root@localhost ~]# echo $username #再次输出,会发现仍是咱们手工赋的值,并无给它赋值为root lv jian zhao #从上面能够看出“-”号的做用,就是若是值不存在,就给它赋值“-”号后面的值,若存在,则放弃。
示例2——若username未设置或为空字串,则将username内容设置为root
[root@localhost ~]# username="" #将username设置为空字串 [root@localhost ~]# username=${username-root} #若值不存在,则赋值为root [root@localhost ~]# echo $username #输出该变量,会发现仍是空的,由于username的值是存在的,只不过是空字串而已,因此并无赋值为root [root@localhost ~]# username=${username:-root} #使用“:-”试试 [root@localhost ~]# echo $username #会发现已经赋值为root了 root #说明:“:-”的做用就是若是值为空或是未设置,都能被后面的内容替换。
环境变量通常是指用export内置命令导出的变量,用于定义Shell的运行环境,保证Shell命令的正确执行。Shell经过环境变量来肯定登陆用户名、命令路径、终端类型、登陆目录等,全部的环境变量都是系统全局变量,可用于全部子进程中,这包括编辑器、Shell脚本和各种应用。
环境变量能够在命令行中设置和建立,但用户退出命令行时这些变量值就会丢失,所以,若是但愿永久保存环境变量,可在用户家目录下的.bash_profile或.bashrc(非用户登陆模式特有,例如远程文件中,或者全局配置/etc/bashrc(非用户登陆模式特有,例如远程SSH)或/etc/profile文件中定义。在将环境变量放入上述的文件中后,每次用户登陆时这些变量都将被初始化。
按照系统规范,全部环境变量的名字均采用大写形式。在将环境变量应用于用户进程程序以前,都应该用export命令导出定义,例如:正确的环境变量定义方法为export OLDGIRL=1。
有一些环境变量,好比HOME、PATH、SHELL、UID、USER等,在用户登陆以前就已经被/bin/login程序设置好了。一般环境变量被定义并保存在用户家目录下的.bash_profile文件或全局的配置文件/etc/profile中,具体的环境变量说明请参考下表:
在查看设置的变量时,有3个命令能够显示变量的值:set、env和declare(替代早期的typeset)。set命令输出全部的变量,包括全局变量和局部变量;env命令只显示全局变量;declare命令输出全部的变量、函数、整数和已经导出的变量。set-o命令显示bash Shell的全部参数配置信息。
查看举例:
[root@localhost ~]# env | tail #使用env命令进行查看全局变量 [root@localhost ~]# set -o #使用set -o查看bash shell的全部参数配置信息
若是想要设置环境变量,就要在给变量赋值以后或在设置变量时使用export命令,具体设置见下文的示例。其实,除了export命令,带-x选项的declare内置命令也能够完成一样的功能(注意:此处不要在变量名前面加$):
export命令和declare命令的格式以下:
①export 变量名=value②变量名=value ; export 变量名③declare -x 变量名=value #以上就是三种设置环境变量的三种方法
上面设置的全局变量只是临时设置的,重启系统后,就失效了,那么能够将变量写入如下几个文件其中之一便可,使其永久生效:
一、只对用户的环境变量配置
[lv@localhost ~]$ ls ~/.bashrc ~/.bash_profile #对于用户的环境变量设置,比较常见的是用户家目录下的这两个目录,推荐写入第一个文件“.bashrc”
二、全局环境变量的配置
常见的全局环境变量的配置文件以下:
/etc/profile /etc/bashrc #推荐在此文件中优先设置 /etc/profile.d/
环境变量的定义:
- 变量名一般要大写;
- 变量能够在自身的shell及子shell中使用;
- 经常使用export来定义环境变量;
- 数字内容的变量定义能够不加引号,其余没有特殊要求的字符串等定义最好都加上双引号;若是真的须要原样输出就加单引号;定义变量加双引号是最多见的使用场景;
- 若是须要获取命令结果赋值给变量,则可使用反撇号``(tab键上面的那个按键)或者括号“()”将命令字括起来;
- 执行env默承认以显示全部的环境变量名称及对应的值;
- 输出时用“echo $变量名”,取消时用“unset 变量名”;
- 书写crond定时任务时要注意,脚本要用到环境变量最好如今所执行的shell脚本中从新定义;
- 若是但愿环境变量永久生效,则能够将其放在用户环境变量文件或全局环境变量文件里;
环境变量初始化与对应文件的生效顺序:
在登陆Linux系统并启动一个bash shell时,默认状况下bash会在若干个文件中查找环境变量的设置这些文件,这些文件可统称为系统环境文件。bash检查的环境变量文件的状况取决于系统运行shell的方式。系统运行shell的方式通常有3种:①经过系统用户登陆后默认运行的shell;②非登陆交互式运行shell;③执行脚本运行非交互式shell。
用户登陆系统后首先会加载/etc/profile全局环境变量文件,这是Linux系统上默认的shell主环境变量文件,系统上每一个用户登陆都会加载这个文件。
当加载完/etc/profile文件后,才会执行/etc/profile.d目录下的脚本文件,这个目录下的脚本文件有不少,例如:系统的字符集设置(/etc/sysconfig/il8n)等。
以后开始运行$HOME/.bash_profile(用户环境变量文件),在这个文件中,又会去找$HOME/.bashrc(用户环境变量文件),若是有,则执行,若是没有,则不执行。在$HOME/.bashrc文件中又会去找/etc/bashrc(全局环境变量文件),若是有,则执行,若是没有,则不执行。
若是用户的shell不是登陆时启动的(好比手动敲下bash时或者其余不须要输入密码的登陆及远程链接状况),那么这种非登陆shell只会加载$HOME/.bashrc,并会去找/etc/bashrc文件。所以若是但愿在非登陆shell下也能够督导设置的环境变量等内容,就须要将变量设定等写入$HOME/.bashrc或者/etc/bashrc,而不是$HOME/.bash_profile或/etc/profile。
———————— 本文至此结束,感谢阅读 ————————