9.11 建立shell脚本的步骤
Shell脚本通常在编辑器中编写,由命令和注释组成。注释通常以#开头,用于说明程序将要做什么事情。
第一行。在脚本左上角的第一行用来说明程序执行脚本的那一行。这行通常称为shbang行。写作:
#!/bin/bash
#!被称为魔术数字(magic number),用于供内核确认哪个程序将翻译并执行这个脚本。该行必须在你的脚本的第一行。
使脚本可执行。当你创建一个文件后,它并没有执行的权限。你需要权限去执行它,通过chmod可以将其权限改变为可执行
Chmod +x myscript
9.2 读取用户输入
9.2.2 read 命令
read 命令是用于从终端或者文件中读取输入的内键命令。
Read命令读取整行输入,每行末尾的换行符倍翻译为Null(空字符串).如果没有知道名称,读取的行就被赋值给一个特定的变量reply。你也可以使用read命令。如果没有指定名次,读取的行就被赋值给一个特定的变量reply。你也可以使用read命令,使得程序停下来等待用户输入回车。
Read命令
格式 | 含义 |
Read answer | 从标准输入读取输入并赋值给变量answer |
Read first last | 从标准输入读取输入到第一个空格或者回车,将输入的第一个单词放入变量first中,并将该行其他的输入放在变量last中 |
Read | 从标准输入读取一行赋值给变量reply |
Read –a arrayname | 把单词清单读入一个叫作arrayname的数字里 |
Read –e | 在命令行状态下打开命令行编辑。如果编辑器是vi,那么在提示符下就可以直接使用vi命令了 |
Read –p prompt | 打印提示,等待输入,并将输入存储在reply中 |
Read –r line | 允许输入包含反斜杠 |
9.3 数学计算
9.3.1 整数(declare命令和let命令)
Declare命令。用declare –i 命令可以将变量声明为整数。如果将字符串赋值给整数变量。Bash将把0赋值给该变量。
整数变量清单。Declare –i 命令后面不加任何参数,将显示所有的整数变量和他们的值。
Let命令。Let命令是bash的内建命令,用来做数学计算和数字表示法检测。
9.4 位置参量与命令行参数
9.4.1 位置参量
信息可以通过命令行传递给脚本。在脚本名称后面以空格分隔的单词称为参数。
命令行参数在脚本中可以按照其位置提供参考作用。变量$#用来判断参数的个数,而$*用来显示所以的参数。
位置参量
位置参量 含义
$0 引用脚本名称
$3 获取位置参量的个数
$* 列位置参量清单
$@ 同上
“$*” 扩展为一个参数
“$@” 扩展为彼此分隔的参数
$1….${10} 引用单个位置参量
9.4.2 set命令和位置参量
set命令可以用来重置位置参量。一旦重置,旧的参考变量清单旧丢失了。恢复位置参量用命令set -- , $0永远是脚本名。
9.5 条件结构和流控制
退出状态
Bash 允许两种类型的条件控制:命令的成功或者失败,表达式的真或者假。在两种情况下都需要使用退出状态。退出状态值为0表示成功或者为真,否则为失败或者为假。?状态变量报错了一个退出状态值相互对应的数值。
内键test命令
通常用内键的test命令给表达式赋值,这个命令也用来连接括号。可以使用test命令,或用一系列的括号代替test命令。只有test命令或者使用方括号时,表达式不能赋值。因为空格在字符串中用来分隔单词,所以包含空格的单词需要使用使用引号。
在bash 2.x版本中,[[]]可以用来给表达式赋值(内键混合的test命令)。包含空格的字符串在整体使用时必须被引号引用。在简单test命令中,逻辑符号&&(逻辑和)和||(逻辑或)可以替代-a 或者 –o选项。
Test命令操作符
判断操作符 | 判断是否为真 |
字符串判断 | |
[string1=string2] | String1等于string2 |
[string1==string2] | String1 等于 string2 |
[string1!=string2] | String1 不等于 string2 |
[string] | String 不空 |
[-z string] | String 长度时0 |
[-n string] | String 长度非 0 |
[-l string] | String 长度 |
逻辑判断 | |
[string 1 –a string 1] | String1 和 string2都是真 |
[string1 –o string2] | String1 或 string2 是真 |
[!string1] | String1不匹配 |
逻辑判断(符合判断) | |
[[pattern1&&pattern2]] | String1 和 string2都是真 |
[[pattern1 || pattern2 | String1 或 string2 是真 |
[[!pattern]] | String1不匹配 |
整数判断 | |
[int1 –eq int2] | 等于 |
[int1 –ne int2] | 不等于 |
[int1 –gt int2] | 大于 |
[int1 –ge int2] | 打印等于 |
[int1 –lt int2] | 小于 |
[int1 –le int2] | 小于等于 |
文件判断中的二进制操作 | |
[file1 –nt file2] | File1 比 file2新 |
[file1 –ot file2] | File1 比 file2旧 |
[file1 –ef file2] | File1 比 file2有相同的设备或者i结点数 |
Let命令操作符
9.5.3 if命令
9.5.4 if/elif/else命令
9.5.5 文件检验
9.5.6 null命令
Null命令用冒号表示,是一个内键的什么都不做的命令,返回状态值为0。如果在if命令后面没有内容,同时有要避免产生错误信息,旧需要在then后面写null语句。通常null命令作为loop命令的参数来建立一个无限循环。
9.5.7 case命令
Case命令是一个多路分支判断语句,可以用来替换if/elif结果。Case命令会尝试用变量匹配value1,value2….直到匹配找到,一旦一个值匹配了case变量,就执行这个值后面的语句直到两个分号为止。然后就从esac(就是case的反向拼写)后面开始执行。
如果case变量没有被匹配,程序就执行*)后面的语句,直到遇到;或者esac为至。*)d 作用跟在if/elif中的else的作用是一样的.case值中允许出现shell通配符和竖线(管道)作为or操作符。
Case variable in
Value1
Command(s)
;;
Value2
Command(s)
;;
*)
Command(s)
;;
esac
9.6 循环命令
For 命令
While命令
Until命令
Select命令和菜单
Here文档是建立菜单的简单方法,但是bash介绍了另外一种循环机制,叫作select循环,主要的作用就是建立菜单。一个数字化的菜单显示在标准错误上,PS3用来提示用户输入。默认的PS3是#?.在PS3提示显示以后,shell就等待用户输入。输入的是该菜单中的数字,若输入被报存在指定变量REPLY中,则变量REPLY中的数字与括号右边选项清单中字符串有着对应的关系。
Looping命令
Shift命令。Shift命令用来把参量列表位移知道次数。没有参数的shift把参数变量表向左位移一位。一旦位移发生,被位移出列表的参数就被永远删除了。通常在while循环中,shift用来读取列表中的参量。
Break命令。内键break命令用来从循环中强行退出,但是不退出程序。
Continue命令。如果某些条件为真,continue命令就控制跳转到循环的顶部。
9.7 函数
9.8 陷阱信号
9.9 调试
9.10 用getopts处理命令行选项
9.11 Eval命令与命令行解析
9.12 Bash选项
9.13 Shell内键命令
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/312079/viewspace-245453/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/312079/viewspace-245453/