Linux元字符
* - 多个字符
- ls * 显示当前目录下文件及直接子目录下文件
- echo * 显示当前目录多有文件名称用空格分隔。
- echo before * after 其中*将显示所有的当前文件夹名称
? - 匹配一个字符
- l?ve.txt 将显示所有love.txt, ldve.txt
[] - [a-z],[A-Z],[^a-Z]等,匹配任意一个字符
2. ls /[u]* 显示已u开头的文件或文件夹。
() 与 (反引号) - 在括号中的命令列表, 将会作为一个子shell来执行。
- 通常与 ( c o m m a n d ) 一 起 使 用 , 效 果 如 ‘ c o m m a n d ‘ , 返 回 执 行 命 令 的 结 果 v a r r e s u l t = (command)一起使用,效果如`command`,返回执行命令的结果 var result = (command)一起使用,效果如‘command‘,返回执行命令的结果varresult=(call function);
- 命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括 号之间不必有空格。
- 命令替换。等同于cmd,shell扫描一遍命令行,发现了
(
c
m
d
)
结
构
,
便
将
(cmd)结构,便将
(cmd)结构,便将(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
初始化数组。如:array=(a b c d)。
[] - test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式
[[]] - 就是条件表达式。在bash中,字符串比较用 > < != == <= >= ,只是在[]中 < >需要转义;对于数值比较.用 -lt -le -eq -ge -gt 来比较,与[[]]中表达不太一样,[[]]中表达式不需要转义。在[ ] 中的 < > 需要用转义 < >,如果有多个表达式,在[[ ]] 中用 && || 来组合,而[] 中是用 -a -o 来组合
(()) - 将表达式转换成C语言运算规则进行计算
- if((i>5)) 条件语句,等价于if[ i -gt 5]
- 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6.
- test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号
$() - 通常我们使用$ ((call function parameters)), $ (call function parameters) 获得函数返回值
$(())与$[] 用来作表达式运算
${} 用来作变量替换用的啦。一般情况下,$var 与 ${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围。
1、${var_name}等价于$var_name(通常用这种简写方式)
2、$(var:-default) 和$(var-default)
$(var:-default) 当var为空或未定义时整个表达式的值为default
$(var-default) 当且仅当var未定义时整个表达式的值为default
3、$(var:=default) 和$(var=default)
$(var:=default) 当var为空或未定义时整个表达式的值为default,并且将var的值设置为default
$(var=default) 当且仅当var未定义时整个表达式的值为default,并且将var的值设置为default
4、$(var:?default) 和$(var?message)
$(var:?message) 当var为空或未定义时,打印错误信息,信息内容为message表示的值
$(var?message) 当且仅当var未定义时,打印错误信息,信息内容为message表示的值
5、$(var:+default) 和$(var+default)
$(var:+default) 当var已定义且不为空时整个表达式的值为default
$(var+default) 当var已定义时真个表达式的值为default(不管var是否是空)
IFS的介绍
Shell 脚本中有个变量叫IFS(Internal Field Seprator) ,内部域分隔符
Shell 的环境变量分为set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了env 变量,但set变量不一定都是env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。
IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。
二、 IFS的简单实例
1 查看IFS的值
echo “$IFS”
echo “KaTeX parse error: Undefined control sequence: \n at position 102: …是Tab,"012"是换行符"\̲n̲" 。最后一个 012 是因为…IFS #保存原始值
IFS=”" #改变IFS的值
…
…
IFS=$OLD_IFS #还原IFS的原始值