shell基础和语法 | 青训营笔记

69 阅读1分钟

重定向

image-20230528165016626.png

若将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"]等价于[helloworld=="hello"],参数过多。需要写成["name=="hello" ]等价于[ hello world=="hello" ],参数过多。需要写成[ "name"=="hello"],才会正常的解析为一个字符串。

[[更丰富,在整型比较中支持<、>、=,在字符串比较中支持=~正则