Shell脚本入门,shell脚本
Shell脚本入门,shell脚本
Shell script(Shell脚本)的工作方式有两种:
①交互式(Interactive):用户每输入一条命令,然后Shell立即执行一次;
②批处理(Batch):由用户实现编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。
查看系统可用的shell(/etc/shells文件)
Linux系统默认的命令行终端解释器为Bash
Shell脚本文件的格式:
脚本文件test1.sh的执行方式:
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的的默认变量(接受用户参数的变量)
- $0:当前Shell脚本程序的名称;
- $#:参数的个数;
- $*:所有位置的参数值;
- $?:上一条命令的执行返回值;
- $1、$2、$3……:第N个位置的参数值。
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) |
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类型)
评论暂时关闭