Shell脚本自动化管理系统的必备基础:
shell其实是一个命令解释器,它的作用是解释用户输入的命令和程序,命令和程序可以理解成我们图中的应用程序,我们linux系统中的那些命令其实也都是一个个的小程序,只不过完成的是系统的应用功能。我们在系统的终端中输入一条命令,可以立马看到一条或者几条系统回复我们的信息,其实就是shell在帮我们回复,所以shell可以称之为命令解释器。这种从键盘一输入命令,就可以立马得到相应的回复信息,叫作交互的方式。相当于我们在和电脑交流。Shell存在于系统的最外层,所以算作操作系统的外壳,它之外的应用程序就不能算作操作系统了。我们从输入系统的账户密码开始,到登录系统以后的所有操作都是shell在帮我们解释执行的。
一、shell
Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理,
Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。
下面是流程示意图:
Shell 基本分两大类
图形界面 Shell(GUI Shell)
命令行界面 Shell(CLI Shell)
CLI 是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。在 Linux 系统上主流的 CLI 实现是 Bash,
查看系统可用的shell(/etc/shells文件)
Linux系统默认的命令行终端解释器为Bash
shell脚本
当linux命令或者语句不在命令行下执行(严格说,命令行执行的语句也是shell脚本),而是通过一个程序文件执行时,该程序就被称为shell脚本或者shell程序。
类似DOS系统下的批处理程序(扩展名*.bat)
shell脚本语言是弱类型语言
编写shell要学会过关环节:
二、Shell脚本文件的格式:
脚本文件test1.sh的执行方式:
以sh(bash)进程来执行脚本文件(用户不必拥有对脚本文件的x权限)(在子进程中执行)
sh -x:实现shell脚本逐条语句的跟踪
sh -n:不执行脚本,仅进行语法的检查
sh -v:执行脚本前,先将脚本的内容输出到屏幕上
通过绝对或相对路径来执行脚本文件(用户须拥有对脚本文件的x权限)
(Linux系统中一切都是文件。后缀名.sh仅提示用户该文件是一个脚本文件,并不代表该文件是可以被用户执行的。文件是否可以被执行在于用户是否拥有对该文件的x权限)(在子进程中执行)
将脚本文件所处的目录添加到PATH环境变量中,通过输入脚本文件名来直接运行(用户须拥有对脚本文件的x权限)(在子进程中执行)
通过source命令或小数点(.)来执行脚本文件(在父进程中执行)
用方式①/②/③执行test2.sh脚本,执行完成后回到命令行模式(父进程)输出脚本中设置的变量,发现变量并不存在
(通过上述①/②/③方式(bash(sh)、绝对/相对路径或者将路径添加到$PATH中)来运行脚本时,该script会使用一个新的bash环境(子shell、子进程)来执行脚本内的命令。当子进程完成后(脚本执行结束),子进程内的各项变量或操作将会消失而不会传回给父进程中。)
若通过source命令或小数点(.)来执行脚本,该script会在父进程中执行。因此,父进程拥有脚本内设置的变量、操作等。
bash shell中的数学运算:在方括号内计算数学公式 [ operation ],结果赋值为result=$[ operation ]。
数学运算浮点解决方案:使用bc命令(bash的内建计算器)。
选项
作用
-q
不显示bc计算器的欢迎信息
输入quit或组合键ctrl+d可退出bc计算器
浮点运算是由内建变量scale(数值范围)控制的,须将这个值设置为希望在计算结果中保留的小数位数,默认值为0。
在脚本中使用bc命令,通过命令替换$(),将输出结果赋值给一个变量:
基本格式为 variable=$(echo "options; expression" | bc)
使用内联输入重定向<<,在命令行中重定向数据(特别适用于进行大量运算):
基本格式为 varible=$(bc << EOF
options
statements
expressions
EOF
)
EOF字符串标识了重定向给bc命令的数据的终止。
bash计算器中创建的变量只在bash计算器中有效。
Shell中运行的每个命令都使用退出状态码告诉shell它运行完毕。退出状态码:0-255的整数值,在命令结束运行时由命令传给shell。变量$?用于保存上个已执行命令的退出状态码。退出状态码可配合exit命令使用。
状态码
描述
0
命令成功结束
1
一般性未知错误
2
不适合的shell命令
126
命令不可执行
127
没找到命令
128
无效的退出参数
128+x
与Linux信号x相关的严重错误
130
通过ctrl+c终止的命令
255
正常范围之外的退出状态码
三、参数变量
Shell script的的默认变量(接受用户参数的变量)
四、文件测试表达式 (man test即可)
test(测试):判断条件表达式是够成立。格式:test [参数]。单独执行test命令后不会显示任何信息。
可通过echo $?输出上一条命令(test命令)执行后的返回结果,若为0则表示执行(判断)成功
或通过&&、||来显示相关结果
操作符
作用
-e file1
测试file1文件是否存在(exist)
-d file1
测试file1文件是否为目录类型,且是否存在(directory)
-f file1
测试file1文件是否为一般文件,且是否存在(file)
-r file1
测试当前用户对file1文件是否有读取权限(read)
-w file1
测试当前用户对file1文件是否有写入权限(write)
-x file1
测试当前用户对file1文件是否有执行权限(execute)
file1-nt file2
测试file1是否比file2新(newer than)(检查文件日期)
file1-ot file2
测试file1是否比file2旧(older than)
操作符
作用
n1 -eq n2
检查n1是否等于n2(equal)
n2 -ne n2
检查n1是否不等于n2(not equal)
n1-gt n2
检查n1是否大于n2(greater than)
n1 -lt n2
检查n1是否小于n2(less than)
n1 -le n2
检查n1是否等于或小于n2(less equal)
n1 -ge n2
检查n1是否大于或等于n2(greater equal)
[ $num1 -eq $num2 ] #注意空格 整数比较不需要加双引号
(( $num1>$num2)) #无需空格,常规数学比较符号
Shell中不应使用"=="和"!="进行整数的比较(会将整数当作字符串来比较)
来自 <http://blog.csdn.net/zbw18297786698/article/details/77460786>
字符串测试所用的参数
操作符
作用
str1 == str2
比较str1与str2字符串的内容是否相同
str1 != str2
比较str1与str2字符串的内容是否不同
-z str1
判断str1字符串长度是否为0(或未被定义)
-n str1
判断str1字符串长度是否为非0
str1 > str2
判断str1是否比str2大(逐位比较字符串的每个字符,按字典顺序比较大小)
str1 < str2
判断str1是否比str2小
(使用>、<(大于号、小于号)进行判断时必须搭配转义字符/使用,否则shell会误认为是重定向符号,把后字符串误当成文件名)(比较字符串顺序大小的测试中,大写字母会被认为是小于小写字母的(与sort命令恰恰相反,在英语环境下sort命令会认为大写字母是大于小写字母的,即排序结果中小写字母优先于大写字母出现))
操作符
作用
test1 -a test2
类似于&&,两个测试条件同时成立时才回传true(and)
test1 -o test2
类似于||,任一测试条件成立就回传true(or)
! test1
反向状态(取反)
[](中括号):判断符号。bash shell提供的另一种条件测试方法,作用同等与test命令,常用于if…then条件判断式中。
中括号的两端、每个组件间都需要有空格符来分隔。
中括号内的变量、常量,最好都以双引号或单引号括起来。
[ "$yn" == "Y" -o "$yn" == "y" ] 也可写成 [ "$yn" == "Y" ] || [ "$yn" == "y" ] (布尔逻辑能将可能的返回值简化为TRUE或FALSE类型)
转自链接:https://www.cnblogs.com/dayoyan/p/8652318.html
https://blog.51cto.com/search/user?uid=2561410&q=%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8
手机扫一扫
移动阅读更方便
你可能感兴趣的文章