1.常见变量以及常见符号
= 等于号赋值,a=1,等号左右不能有空格 $a 调取a变量的值 ${a} 调取a变量的值,当{a}后面有其他字符时,不会影响a的获取 $? 判断上一条命令执行的结果,成功为0,失败为1 $1-$9 返回对应的第几个参数 $* 返回所有的参数的值是什么 $# 返回参数的个数
> 输出重定向(覆盖) >> 输出重定向(追加) ; 执行多条命令 | 管道符 && 前一条命令执行成功才会执行后面 || 前一条命令执行失败才会执行后面 "" 输出变量识别通配符 '' 输出本身 `` 优先执行,放在``中会识别成命令执行 2>/dev/null 错误输出到无底洞
2.常见的条件判断
- 语法:[ 判断表达式 ]
常见判断条件 -e 目标是否存在(exist) -d 是否为目录(directory) -f 是否为文件(file) -r 是否有读权限(read) -w 是否有写入权限(write) -x 是否有执行权限(excute) -eq 等于(equals) -ne 不等于(not equals) -gt 大于(greater than) -lt 小于(lesser than) -ge 大于或等于(greater or equal) -le 小于或等于(lesser or equal) = 判断字符串是否相等 != 判断字符串是否不相等
3.shell脚本的输入
语法:read -参数
-p 给出提示符,默认不支持”\n“换行 -s 隐藏输入的内容 -t 给出等待的时间,超出会推出read -n 限制读取自渡川的个数,触发时到临界的值会自动执行
4.判断语句
(1)单个判断
if [ 执行条件 ]
then
执行语句
fi
(2)单个判断带else
if [ 执行条件 ]
then
执行语句
else
执行语句
fi
(3)多个判断
if [ 执行条件 ]
then
执行语句
elif [ 执行条件 ]
执行语句
.....
fi
5.循环语句
5.1for循环语句
(1)for 变量名 in 值1 值2 值3 ....
do
执行语句
done
(2)for 变量名 in `命令`
do
执行语句
done
(3)for ((条件))
do
执行动作
done
5.2 case循环
case 变量 in
值1)
执行动作1
;;
值2)
执行动作2
;;
值3)
执行动作3
;;
....
esac
5.3 while 循环
while [ 执行条件 ]
do
执行语句
done
定义一个变量
file=/file1/file2/file3/m.file.txt
通过 ${ } 分别替换获得不同的值,单一符号是最小匹配﹔两个符号是最大匹配
1. # 去掉/左边的
1)${file#*/}:拿掉第一条 / 及其左边的字串:file1/file2/file3/m.file.txt
2)${file##*/}:拿掉最后一条 / 及其左边的字串:m.file.txt
3)${file#*.}:拿掉第一个 . 及其左边的字串:file.txt
4)${file##*.}:拿掉最后一个 . 及其左边的字串:txt
2.% 右边 去掉/右边的
1)${file%/*}:拿掉最后条 / 及其右边的字串:/file1/file2/file3
2)${file%%/*}:拿掉第一条 / 及其右边的字串:(空值)
3)${file%.*}:拿掉最后一个 . 及其右边的字串:/file1/file2/file3/m.file
4)${file%%.*}:拿掉第一个 . 及其右边的字串:/file1/file2/file3/m
3.字符定位:字符数
1)${file:0:6}:提取最左边的 6 个字:/file1
2)${file:6:6}:提取第 6 个字符右边的连续 6 个字:/file2
4.字符串替换 /(第一个);//(全部)
1)${file/file/path}:将第一个 dir 提换为 path:/path1/file2/file3/m.file.txt
2)${file//file/path}:将全部 dir 提换为 path:/path1/path2/path3/m.file.txt
5.针对不同的变数状态赋值(没设定、空值、非空值):
- :- +
1)${file-m.file.txt} :假如 $file 为空值,则使用 m.file.txt 作默认值。(保留没设定及非空值)
2)${file:-m.file.txt} :假如 $file 没有设定或为空值,则使用 m.file.txt 作默认值。 (保留非空值)
3)${file+m.file.txt} :不管 $file 为何值,均使用 m.file.txt 作默认值。 (不保留任何值)
:+ = :=
4)${file:+m.file.txt} :除非 $file 为空值,否则使用 m.file.txt 作默认值。 (保留空值)
5)${file=m.file.txt} :若 $file 没设定,则使用 m.file.txt 作默认值,同时将 $file 定义为非空值。 (保留空值及非空值)
6)${file:=m.file.txt} :若 $file 没设定或为空值,则使用 m.file.txt 作默认值,同时将 $file 定义为非空值。 (保留非空值)
? :?
7)${file?m.file.txt} :若 $file 没设定,则将 m.file.txt 输出至 STDERR。 (保留空值及非空值))
8)${file:?m.file.txt} :若 $file 没设定或为空值,则将 m.file.txt 输出至 STDERR。 (保留非空值)
6.计算出变量值的长度#
${#file} 等于29