运维培训3.4

1. Shell概述

Shell的作用—命令解释器;shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上。

Shell的两种主要语法类型有Bourne和C,二者彼此不兼容;Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell, 其属于Bourne家族。

2. Shell基础

在Bash中,命令与文件补全是非常方便与常用的功能,在输入命令或文件时,按“Tab”键就会自动进行补全,经常使用。

命令别名:alias 别名='原命令';删除别名:unalias 别名。

alias的作用仅在该次登入的操作,即输入一次alias后,这个修改只在当前的Shell生效。如果重新开启一个 Shell,或者重新登录,则这些alias将无法使用。好在linux中提供alias永久化的方法:
1).若要每次登入就自动生效别名,则把别名加在/etc/profile或~/.bashrc中,然后# source ~/.bashrc 
2).若要让每一位用户都生效别名,则把别名加在/etc/bashrc最后面,然后# source /etc/bashrc 

---多命令顺序执行---

           执行符           格式                                     作用

               ;           命令1;命令2            多个命令顺序执行,命令之间没有逻辑关

             &&         命令1&&命令2        逻辑与:当命令1正确执行,则命令2才执行;当命令1执行不正确,则命令2不执行

               ||          命令1||命令2           逻辑或:当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不执行

(1)| :管道符; 命令1 |  命令2,命令1的正确输出作为命令2的操作对象。

(2)tee:读取标准输入的数据,并将其内容输出成文件; -a,附加到既有文件的面,而非覆盖它; -i,忽略中断信号 ;--help,在线帮助;--version,显示版本信息。

(3)echo:输出命令;-e,支持反斜线控制的字符转换;-n,不换行输出;\a,发出警告声;\b,删除前一个字符;\c,最后不加上换行符号;\f,换行但光标仍旧停留在原来的位置;\n,换行且光标移至行首;\r,光标移至行首,但不换行;\t,插入tab;\v,与\f相同;\\,插入\字符;\nnn,插入nnn(八进制)所代表的ASCII字符;

3. Shell脚本

使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象。

缺点:它们的效率通常不如编译型语言。不过权衡之下,通常使用脚本编程还是值得的,花一个小时写成的简单脚本,同样功能用C或C++来编写实现,可能需要两天,而且一般来说,脚本执行的速度已经够快了,快到足以让人忽略它性能上的问题。

Shell脚本的基本元素:1) #!/bin/bash 必须的,指出shell的类型;2)# 注释;3)变量;4)控制

运行Shell脚本方法:1)# sh ./datewho.sh;2)# chmod +x datewho.sh    # ./datewho.sh

shell变量:可以保存如路径名、文件名或者一个数字;变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的;在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。

---变量分类---

1)本地变量(用户变量):在用户现在的shell生命期的脚本中使用,可以在shell程序内任意使用和修改它们。

注意:1)变量声明及赋值格式:变量=值(等号两边不能有空格);2)取值包含空格,必须用双引号括起来;3)Shell变量可以用大小写字母,区分大小写;4)变量是弱类型的(不用声明类型);5)变量使用:$变量名、${变量名}。显示变量:echo命令可以显示单个变量取值,变量名前加$;清除变量:unset 变量名。

2)环境变量:可以在创建它们的Shell及其派生出来的任意子程序中使用;有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们,还能在shell中加以修改。环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过pstree可以查看。环境变量可以用于所有子程序,着包括编辑器、脚本和应用。环境变量可以在命令行中设置,但用户注销时这些值将丢失;环境变量均为大写;必须用export命令导出。设置环境变量:variable-name=value 、export variable-name(环境变量名大写);显示环境变量:env,可以看到所有的环境变量;echo $环境变量名 (显示一个变量);清除环境变量:unset 环境变量名。

主要环境变量列举:HOME:代表使用者的家目录。cd ~,去到使用者的家目录或者利用 cd 就可以直接回到使用者家目录了。SHELL:目前这个环境使用的 SHELL 是哪个程序; 如果是 bash 的话,预设是 /bin/bash。PWD:用户当前工作目录的路径。它指出用户目前在Linux文件系统中处在什么位置,是由Linux自动设置的。HISTSIZE:这个与“历史命令”有关,曾经下达过的指令可以被系统记录下来,而记录的“数目”则是由这个值来设定的。ENV:这个使用者所使用的个性化环境设置的读取文件。MAIL:当我们使用 mail 这个指令在收信时,系统会去读取的邮件信箱文件 (mailbox)。PATH:就是执行文件搜寻的路径,目录与目录中间以冒号(:)分隔,由于文件的搜寻是依序由 PATH 变量内的目录来查询,所以目录的顺序也很重要的。LANG:语系文件,很多数据都会用到他,当出现编码错误的时候往往需要设置它,中文编码是zh_CN.UTF8。

让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改。Bash的初始化文件有:/etc/profile、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc、/etc/bashrc。/etc/profile,存放一些全局(共有)变量,不管哪个用户,
登录时都会读取该文件。通常设置一些Shell变量,如PATH,USER,HOSTNAME和HISTSIZE等;~/.bash_profile,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下设置一些环境变量,要执行用户的.bashrc文件;~/.bashrc,该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新shell时,该文件才被读取;/etc/bashrc,为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。

配置文件的作用:1)登录Linux先启动系统配置文件/etc/profile,并从/etc/profile.d目录的配置文件中搜集shell的设置,为
系统的每个用户设置环境信息。2)用户配置文件~/.bash_profile,每个用户专用于自己使用的shell信息,仅用户登录时执行一次;默认情况下,此文件通过脚本执行同目录下用户的.bashrc文件。区别:bash_profile只在会话开始的时候读取一次,而
bashrc则每次打开终端时都会读取。3)~/.bashrc文件包含专用于用户bash shell的bash信息,登录及每次打开新的shell时都会执行,里面又会调用/etc/bashrc。

3)内部变量:由系统提供的;与环境变量不同,但用户不能修改它们。内部变量是Linux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在shell程序内这类变量的值是不能修改的。

部分内部变量是:$#,传送给shell程序的位置参数的数量;$?,最后命令的完成码或者在shell程序内部执行的shell程序(返回值),0表示没有错误,其他任何值表明有错误; $0,shell程序的名称; $@,调用shell程序时所传送的全部参数的单字符串,“参数1”“参数2”…形式保存的参数;$*,“参数1 参数2”…形式保存的参数;$n,第n个参数;$$,本程序的PID。

特殊符号:注释符#,除了#!/bin/bash里的#特殊;美元符 $,变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来;单引号,被引起的字符全部做普通字符,即全部原样echo ‘my $SHELL’ ;双引号,引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符;倒引号(数字1键旁边的那个键),引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分;反斜线,转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符;string="abcd"
 echo ${#string} #输出 4,获取字符串长度;string="runoob is a great site" echo ${string:1:4} # 输出 unoo,提取子字符串。


 

猜你喜欢

转载自blog.csdn.net/LS198217/article/details/88138206