格式:
#! /bin/bash ... exit 0 |
Linux(Ubuntu)默认使用bash程序,其中exit 0表示脚本执行成功
与终端交互
#从终端读取参数,会从当前行阻塞 read var #向终端打印hello echo “hello” |
Shell系统变量
$? :表示保存前一个命令的返回值 $0 :当前程序名 $1 :第一个参数 $2 :第二个参数 $n :第n个参数 $# :保存参数的个数 $* : 以("$1 $2 …")的形式保存所有输入的命令行参数(保留输入区分隔符)。 $@ : 以("$1" "$2" …)的形式保存所有输入的命令行参数(不保留输入区分隔符)。
$HOME 当前用户的登录目录 $PATH 当前系统命令的搜索目录清点 $PS1 命令提示符,通常是“$”字符 $PS2 辅助提示符,通常是“>”字符 $IFS 输入区的分割符,通常是空格、制表符、换行符. |
定义变量并取值
var=hello 注意这里赋值时必须要紧挨着等号,否则会不认识 $var :表示取变量值: hello ${var} :也是取变量的值:hello ,之所以带花括号,是为了区别变量名与字符串中内容冲突的情况 var=hello echo "${var}iable" 这种情况打印:helloiable echo "$variable" 这种情况打印为空字符串,因为variable变量我们没有定义 加入我们之前定了var变量,我们又想打印"$var"这个字面值,而不是打印变量var的内容,我们应该在$前面使用转义符"\" \${var} :将打印"${var}" \$var :将打印"$var" i=`expr $i + 1` :取变量i的值并加1,然后赋值给i,注意这里使用的是反引号而不是单引号 $(($i+1)) :与上边的效果相同,也是表达式赋值 var=$(cmd 参数) : 执行系统命令,将其打印的结果保存到var变量中 其中cmd是Linux系统的shell命令 |
字符串判断表达式
相等 str = str2 注意这里 两个字符串与等号隔开,否则会认为是赋值 不等 str != Str2 非空 N str 空 Z str算数表达式
相等 data1 eq data2 不相等 data1 Ne data2对文件的操作
为目录文件 -d file 是否为空文件 -s file 文件存在 -e file 普通文件存在 -f file
是否设置了组权限、用户权限
-g file -u file
是否可读、可写、可执行
-r file -w file -x file
条件语句
if [ expression ] # 中括号内必须为表达式expression then echo “123” else echo "456" fi |
test 命令替代中括号
if test -f android.c then echo "exist" else echo "not exist" fi |
echo "please input yes/no" read var if [ ${var} = "yes" ] then echo "data yes" elif [ ${var} = "no" ] then echo "data no" else echo "input data is: "${var} fi |
For循环语句
for item in ${list} #循环从list中读取到item变量中 do echo ${item} done |
While 循环
while [ “123” = “123” ] do echo “hello” done |
分之语句
case ${var} in "yes") echo "world";; #注意这里必须双分号结束. "no") echo "hello";; *) echo "****";; #匹配所有字符串,必须放到最后面 esac |
Until语句
read var until [ $var = "hello" ] 条件为真则跳出循环 do read var done |
函数
function_name() { echo “第一个参数$1” echo “第二个参数$2” echo “第三个参数$3” } #调用函数,并传递三个参数,函数必须在调用前定义,且必须有函数体. function_name 1 2 3 |
*脚本调试
sh -n <script> 检查脚本语法是否有错 sh -v <script> 执行每条脚本语句前,并打印本条脚本语句,并回显执行结果 sh -x <script> 执行每条脚本语句后,并打印本条脚本语句,并回显执行结果