(说明一下,默认是从左边开始,如果“位置”为负数,则是从右边的第“位置”个字符开始,并且第一个位置为0;从“位置”开始取子串到最后)
例:
str1=abcABCabc123ABC
echo ${str1

(2)${变量1:开始位置:结束位置}
(3)如果“变量1”为“*”或“@”,“位置”所表示的是第几个参数。
cmd1;cmd2 cmd1无论成功与否,cmd2 都会执行
cmd1&&cmd2 cmd1 执行成功后才执行cmd2
cmd1||cmd2 cmd1执行失败后才执行cmd2,成功则不执行cmd2,有且只有一条命令执行
ctrl + z 是暂停任务,fg 把jobs的后台任务转到前台执行,bg把前台执行的任务转到后台 , cmd1 & 的意思是在后台执行cmd命令
ctrl + d是中止任务
num = 2
echo "the number is $numnd" 输出是 the number is ,把numnd当作是一个变量
echo “the number is ${num}nd ”, 输出是the number is 2nd
echo "the number is {$num}nd", 输出是the number is {2}nd
${ } 用来作变量替换。
一般情况下,$var 与 ${var} 并没有啥不一样。
单引号 ‘
由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:
$ string=’$PATH’
$ echo $string
$PATH
双引号 “
由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。
反引号 `
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:
$ pwd
/home/xyz
$ string=”current directory is `pwd`”
$ echo $string
current directour is /home/xyz
$
反斜杠
反斜杠去掉它后面字符的特殊意义,如:
$echo "\$x"
$x
$echo "THe Value of x is \"$x\""
THe Value of x is "5"
$echo \\
\
$echo '\'
\
shell把行尾的反斜杠作为续行,它去掉跟在后面的换行字符,也不把换行字符当作参数分隔符。
这种结构在分几行键入命令时经常使用。
命令替换
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置的功能。
1)反引号
用法:`command`
$echo the date and time is : `date`
the date and time is wed aug 28 14:28:43 edt 2007
2)$(...)结构
用法:$(command)
$echo the date and time is : $(date)
括号中不限于执行一条命令,如果把命令用分号隔开,可以执行多条命令;也可以使用管道线.
这种结构比反引号好.首先,复杂的命令中组合使用正,反引号很难看懂;第二,$()结构容易嵌套,这样可以在命令替换中进行命令替换,
尽管用反引号也能进行嵌套,但比较难处理.
expr 命令
expr 1 + 2
每一个操作符和操作数都必须分别用参数传给expr,故expr 1+2 是错误的
$? 表示上一个程序执行结束的返回jjkkik值
case 是用来匹配一个给定的字符串
select 是bash的一个扩展使用,可用于用户交互,用户可以从一组不同的值中进行选择
-n 字符串不为空,则为真
-z 字符串为空 则为真
shell -x test.sh 为调试模式
shell -n test.sh 只进行语法检查
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
至于!号那就是取非了呗!