$0 这个脚本的执行名字
$n 这个脚本的第n个参数
$* 这个脚本的所有参数
$# 这个脚本参数个数
$? 上一个指令的返回值,0代表没有错误
变量名外加花括号,识别边界
echo \”I am good at ${skill}Script\”
aaa=${var} 将变量var的内容赋给aaa
aaa=$(echo $PATH) 括号里必须为命令,将命令的结果赋给aaa
${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
字符串:
单引号 ‘ ’ ——任何字符都原样输出,变量无效
双引号 “ ” ——可以有变量、转义字符
反引号 ` ` ——将特殊符号转义成普通字符,识别command
str=\”Hello, I know you are \\\”$your_name\\\”! \\n\”
echo -e $str -e可以输出转义字符
-c 两个echo之间不换行
输出结果为:
Hello, I know you are \”runoob\”!
系统识别将前两个单引号组合,后两个组合
取字符串长度
string=\”abcd\” echo ${#string} #输出 4
算数运行
result=$[a+b] equal result=`expr $a + $b `
关系运算符:
-eq 是否相等 ==
-ne 是否不等 !=
-gt 大于 >
-lt 小于 <
-ge >=
-le <=
布尔运算:
不等于 !=
或 -o
与 -a
if [ -f $file ]
then
command
elif [ ]
then
command
else
command
fi
let命令 let A++ 变量不需要加$
let 表达式 等于 shell((数学运算表达式))
函数
funWithReturn(){ echo \”这个函数会对输入的两个数字进行相加运算…\” echo \”输入第一个数字: \” read aNum echo \”输入第二个数字: \” read anotherNum echo \”两个数字分别为 $aNum 和 $anotherNum !\” return $(($aNum+$anotherNum)) /return $[a+b] } funWithReturn echo \”输入的两个数字之和为 $? !\”
$# |
传递到脚本的参数个数 |
$* |
以一个单字符串显示所有向脚本传递的参数 |
$$ |
脚本运行的当前进程ID号 |
$! |
后台运行的最后一个进程的ID号 |
$@ |
与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- |
显示Shell使用的当前选项,与set命令功能相同。 |
$? |
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
引用脚本 . filename
. ./filename
set -e 当命令的返回值为非零状态时,则立即退出脚本的执行。如果有脚本调用,被调脚本不会被主脚本的影响
一个shell中定义的变量只能在一个shell中使用,其他shell不可使用,若想使其生效,需用export命令对已定义的变量进行输出,export命令将使系统在创建每一个新的shell时,定义这个变量的一个拷贝
basename,剥除路径与后缀,只保留文件名
set -e bash如果任何语句的执行结果不是true则应该退出。可以使用set -o errexit,它的作用与set -e相同。