----------------------------shell脚本简介------------------------------------------
shell脚本,简而言之,就是在text文件写的一些命令的集合
一个脚本的文件权限不一定是可执行的,但一定要是可读的
bash指令能够在子shell中产生一个脚本
前面我们讲过 chmod指令可以修改文件的权限脚本同样也是一个文件,
将脚本修改为一个可执行文件(程序),即可执行
./<filename> 在当前路径下执行
---------------------------脚本的执行-----------------------------------------------
通过<.>或 source指令可以执行脚本,一个脚本的执行可能会改变你当前的环境,大部分的脚本都是在bash中运行的
为了确保脚本在你指定的shell中执行
可用如下指令:
#!/bin/<shellname> 表示强制
----------------------典型的shell脚本的内容----------------------------------------
一. shell脚本的参数
1.位置参数:由系统提供的参数
$<num> : 0为程序名,1.......代表第n个参数
2.内部参数:必不可少的参数
$@ : 是所有参数分别作为一个字符串的集合
$* : 是所有参数组成的一个字符串
$# : 返回参数的个数
$?: 返回脚本执行后的返回值,成功为0 , 失败为0
---------------例子来也----------------------------------------------------------
---------------例子去也-----------------------------------------------------------------------
-----------------------一丢丢复杂的I/O重定向与管道---------------------------------------------
cat << END > <filename>
可以向该文件出入多条文本,以END为截止符号
END可以由其他字符串替代
为了方便通过管道传递参数我们引入一个xargs指令
xargs指令能够从stdin读入内容,并根据设定的间隔符号(默认为空格),将文本内容分解为参数,方便管道传输中一些参数的传递
下面是它的一些options:
-0 : 当stdin中输入了一些元字符时,当作普通字符处理
-a <filename> : 将stdin转换成 文件读入
-e <flag> : 表示在读入时终止读入的字符
-d <flag> : 转换为参数的间隔符号,默认是空格
----------------------条件检测指令test-------------------------------------------------------------------
格式是 text [-options] <filename>
下面是一些常用的options:
1.判断句的格式:
if test ( 表达式为真 )
if test (表达式为假)
test [表达式1]-a [表达式2] 两个表达式同时为真
test[表达式1] -o [表达式2] 两个表达式同时为假
2.判断文件(以下均是表达式写法):
-f 判断文件是不是一个普通文件
-d 判断文件是不是一个文件夹
-r 判断文件是不是可读
-w 判断文件是不是可编辑
-x 判断文件是不是可执行
3.判断字符串
-n <string> : 字符串长度不为0
-z <string> :字符串长度为0
<string1> == <string2> :两个字符串相等
<string1> != <string2> :两个字符串不相等
4.判断数值的比较
<value1> -eq <value2>: 相等
<value1> -ne <value2>: 不等
<value1> -lt <value2> : 小于
<value1> -le <value2> : 不大于
<value1> -gt <value2> :大于
<value1> -ge <value2> : 不小于
---------------&&和||指令---------------------------------------------------
与C++中符号作用可不同,不要混淆。。。。。
command1 && command2:
若指令1成功,那么执行指令2
command1 || command2 :
若指令1失败,那么执行指令2
-------------------------if指令------------------------------------------------
很简单。。。给出格式,就这样把
if [ 命令序列组成的表达式 ( 返回true(0) ) ] (方括号和语句间的空格是必须的)
then
要进行的指令
else
要进行的指令
fi
结束
------------------------循环结构---------------------------------------------------
1.while循环结构
while ( true)
do
一堆指令
done
结束
2.for <indentifier> in <list>
do
一堆指令
done
for 的形式很多,上面这种最常用,下面举个例子,方便理解
--------------------栗子君-----------------------------------------------------------
--------------------例子君-----------------------------------------------------------
-----------------shift是左移指令------------------------------------------------------------------
用一个图解解释,就很容易懂了
-------------------------read指令---------------------------------------------------------------------
read指令可以用来通过stdin读入一行,然后把读到的值赋值一个变量
下面用一个例子说明
---------------------我是例子--------------------------------------------------------------
---------------------还是我-----------------------------------------------------------------
-------------------------在bash中利用简单的整数运算-----------------------------------
两个命令比较常用,一个是let , 一个是 $(()) 命令:
应用如下:
支持 + , - , * , / , %
------------------------就这样了------------------------------------------------------------------------