Shell 脚本
书写
开头第一行可以以#! /bin/bash
开头也可以不写,保存后的文件名可以以.sh
结尾也可以不写,Linux系统会自动对文件类型进行识别。
运行
执行shell sh test1.sh
这种执行方式可以不设置文件的属主还有权限,属于调用shell给它参数然后执行参数内的脚本。
sh < text
为文本输入。
shell环境变量
$* 所有命令行参数的值
$# 命令行参数的总数
$$ 当前进程的进程ID(PID)
$? 最后执行的一条命令的退出状态,返回值为0则成功,非0则失败
$! 在后台运行的最后一个进程的进程ID
位置参数
共有10个位置参数,依次是:$0 ,$1 ,$2 ,$3 ,$4 ,$5 ,$6 ,$7 ,$8 ,$9
,其中 $0 始终表示命令名或shell脚本名。
用set
给位置参数赋值
set a b c
执行结果是把字符串a赋值给$1,b赋值给$2 ...依次赋值。但$0
不能利用set命令赋值,因为它始终是命令名。
用shift
移动位置参数
shift 4
把位置参数左移4位。
如果没有带参数,默认值为1。
用户自定义变量
shell脚本中的用户自定义变量拥有临时的存储空间。
在shell编程语言中无需声明和初始化shell变量。
一个未初始化的shell变量,其默认的初始值为空字符串。
格式:
mkdir=/home/zzm
。
如果赋值给变量的值中有空格、制表符或换行符,要用引号把字符串包起来。
赋值语句可以出现多个赋值,变量赋值可以迭代进行。各赋值动作是从右向左实现的。A = $B B=$C C=hello
。
使用变量:
在变量前面加一个$符。
如果出现在长字符串中要使用{}
把变量名包括起来。
shell中的特殊字符
* 匹配任意一个字符串
? 匹配任意一个字符
[] 方括号中有一个字符组,匹配该字符组所限定的任何一个字符
! 表示不再一对方括号中的字符
双引号
除$,倒引号和反斜线(\)仍保留其特殊功能外,其余字符作为普通字符对待。
倒引号
- shell解释执行
- 利用倒引号的shell解释功能可以进行命令替换,即把倒引号中的命令的结果赋值给指定变量。
执行顺序操作符
顺序分隔符 ; 多条命令可以在多行中键入,也可以将这些命令在一行中输入,但各条命令应以分好隔开
管道线 | 也是顺序执行
执行顺序操作符
逻辑与&&
把两个或两个以上的命令联系在一起。
第一个命令成功才运行后面的命令。命令执行成功返回值为0,失败为非0。
执行顺序操作符
逻辑或||
把两个或两个以上的命令联系在一起。
第一个成功则不运行第二个。
注释符,反斜线
# 注释符
\ 反斜线 把特殊字符变为普通字符。
& 后台操作符
输入输出命令
shell参数意义
$0 shell本身文件名
$? 最后运行命令的返回值
$! shell最后运行的后台process的PID
$$ shell本身的pid
$# shell的参数个数
$@ 所有参数列表, 以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个
$* 所有参数列表, 以"$1" "$2" … "$n" 的形式输出所有参数
有什么不同见解可以在评论区共同讨论