重定向
若将fd0指向~./bashrc,fd1和fd2指向tempfile,就实现了输出重定向和输出重定向。
输出重定向符号:
/ >:覆盖写入文件(可写为1>,1通常省略)
/ >>:追加写入文件
2>:错误输出写入文件(即fd2)
&>:正确和错误输出统一写到文件中
输入重定向符号:
<
<<:引用当前的标准输入,但是当识别到指令符号的时候就会停止接收,然后将已经接收到的结果传递给命令
wc -l <<EOF
wc命令用于计算字数
-l或--lines 显示行数
获取权限信息:
while read -r line; do
echo $line | cut -d " " -f 1 | xargs >> auth.txt
done < ./list.txt
while循环的条件是从标准输入读取信息,然后将标准输入使用输入重定向到list.txt,read会从文件中一行一行读取,然后通过对每一行信息cut完取第一列,写入到auth.txt
-r模式下所有\不再为转义标识
-d设置间隔符为“ ”
-f提取所需域
xargs( eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
判断命令
shell中提供了test、[、[[三种判断符号,可用于:
整数测试
字符串测试
文件测试
语法:
test condition
[ condition ]
[[ condition ]]
#!/bin/bash
#整数测试
test $nl -eq $n2
test $nl -lt $n2
test $nl -gt $n2
#字符串测试
test -z $str_a
test -n $str_a
test $str_a=$str_b //相等
#文件测试
test -e /dmt && echo "exist"
test -f /usr/bin/npm && echo "file exist"
-eq:等于
-lt:小于
-gt:大于
-z:为空
-n:非空
-e:存在
-f:存在并且是一个普通文件
注意:
中括号前后要有空格符;
[和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串,不能用来做整数的比较
中括号内的变量最好都是用引号括起来
#!/bin/bash
name="hello world"
[ $name=="hello" ]
上面这段代码会报错,此时[ name"=="hello"],才会正常的解析为一个字符串。
[[更丰富,在整型比较中支持<、>、=,在字符串比较中支持=~正则