文章目录
1 $? $# $* $n $0
$?
表示上一次的输出结果,若为0
:表示成功;不是0
,表示失败$#
表示脚本中参数的个数
$*
表示对应参数的值$n
表示为(n>=1
)的参数$0
表示脚本名
###这是测试脚本
#!/bin/sh
echo 这是脚本名字:$0
echo 总共有$#个人,分别是$*
echo 第一个人是$1,第二个人是$2
### 这是运行结果
这是脚本名字:sympol.sh
总共有2个人,分别是李四 张三
第一个人是李四,第二个人是张三
$?
的测试:
2 分号
分号
是多个语句之间的分隔符号
,当只有一个语句的时候,末尾无需分号
,最后一个语句后面也无需分号
,否则报错
3 引号
单引号
中是原始字符串
双引号
可以对特殊字符进行扩展
一般不写的就是当双引号用的
a=bcdef
echo $a # 输出bcdef
echo "$a" #双引号将进行变量扩展 ,输出bcdef
echo '$a' #单引号直接输出$a
4 括号的作用
4.1 命令替换
$( )
和反引号`(tab
按键上面) 作用相同:命令替换
4.2 数值运算
$(( ))
是整数数值运算,也可用(( ))
代替- 另
$[ ]
也是进行数学运算的;
4.3 test运算
[ ]
是代替test
运算符的,也可用[[ ]]
代替,使用双中括号,逻辑更加严谨
4.4 ${}
4.4.1 界定符号
${}
界定符号,比如$ab
,就相当于${ab}
,而${a}b
才是只取a
的值
对于linux符号的使用例子,可以参考本人的linux小游戏来熟悉
4.4.2 取路径,文件名,后缀
#假设一个变量名为file
file=/dir1/dir2/dir3/my.file.txt
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
#
表示从左边算起第一个(键盘上#
在$
的左边,要注意使用#
时,删除符号*
放在标志符号(/或.
)左边)##
:表示从左边算起最后一个%
表示从右边算起第一个(键盘上%
在$
的右边,要注意使用%
时,删除符号*
放在标志符号(/或.
)右边)%%
:表示从右边算起最后一个单一
符号是最小匹配
;两个
符号是最大匹配
*
:表示要删除的内容,对于#
和##
的情况,它位于
指定的字符(例子中的'/'和'.'
)的左边
,表示删除指定字符及其左边的内容;对于%
和%%
的情况,它位于
指定的字符(例子中的'/'和'.'
)的右边
,表示删除指定字符及其右边的内容。这里的*
的位置不能互换,即不能把*
号放在#
或##
的右边,反之亦然。
5 与(&)或(|)
5.1 与&
&
:表示任务在后台执行,在后台运行,redis-server &
&&
:表示前一条命令执行成功时,才执行后一条命令,如:echo '1' && echo '2'
5.2 或|
|
:表示管道符,上一条命令的输出
作为下一条命令参数
||
:表示上一条命令执行失败
后,才执行下一条命令,如:cat nofile || echo '1'