保存
×

基础

读取输入

cat >  hello.sh<<END

读取用户输入,直到碰到END(自定义终止符号)

管道

重定向

重定向是覆盖写

cmd > /dev/null 2>&1

所有屏幕上的标准输出内容重定向到销毁机中,2>&1,2号管道在1号管道输出(&等价)。

完全停用输入和输出

cmd /dev/null 2>&1 &

cat < a.c > a.c

结果为空!而不是a.c的内容\n 原因: 重定向在底层即为,所有的shell是在底层把所有的文件准备好之后才开始执行,<以只读的方式打开a.c,还没有开始读>相当于以覆盖的方式fopena.c,此时内容为空,导致读到的内容为空!

cat << a.c >> a.c

死循环!\n 原因:追加写,先只读打开a.c,然后追加写打开a.c,当写入内容时,读管道又检测到待读内容,产生死循环

重定向之书写顺序

cmd &> /dev/null

&表示后台执行cmd,

循环

    for i in `seq 1 3`; do
        echo $i
    done
    
    # c 风格的for循环,核心为2个括号
    LIMIT=10
    for ((a=1;
        a<=LIMIT;
        a++))
    do
        echo "$a"
    done

调式

bash -x 和 echo

进阶

awk 是所有shell命令中效率最高的

变量常识

数组

进程替换 <() >()

diff 2 个服务器的文件

vimdiff <(ssh server1 cat conf)<(ssh server2 cat conf)

还原所有备份文件

for file in ls .; do cp $file "$file.bak" done