shell脚本小技巧—001

时间:2022-07-22
本文章向大家介绍shell脚本小技巧—001,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

子shell的使用

在子shell中执行命令时,不会对当前的shell有任何影响,所有在子shell中执行的命令仅限于子shell内,例如:

cat test.sh

#!/bin/bash
cd /data
pwd
(
cd /usr/local/
ls -l
pwd
)
pwd

执行后的结果可能跟我们固有的想法大不一致

可以看到我们加上()后,就仿佛括号里的所有操作都与整个shell本身都没关系了,其实是开了一个子shell,所有的操作都是在子进程中执行。

下面再看一个while循环的例子

#!/bin/bash
test1() {
num=1
while :
do
        if [ $num -lt 5000000 ];then
                let num+=1
        else
                echo over.
                return
        fi
done
}

test2() {
num=1
while true
do
        if [ $num -lt 5000000 ];then
                let num+=1
        else
                echo over.
                return
        fi
done
}

使用while  :  时

使用while true 时

可以看到test1 函数执行速度是快于test2的,这是因为true是作为/bin中的一个二进制文件夹来实现的,在while循环中,每执行一次,shell就会生成一个进程,而 : 则是shell内建的命令,它总是返回一个0的退出码

再看实用点的命令

cat test.sh

#!/bin/bash
repeat() { while :;do $@ && return; sleep 3;done }
$1 $@

执行结果如下

大概每隔几秒就会去访问一次,直到下载成功。