专栏首页IMWeb前端团队bash 的条件和循环

bash 的条件和循环

本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载

原文

条件语句和循环可以统称为流程控制,是一门语言最基础的部分。

bash 的流程控制和大家熟悉的语言非常类似,所以这块上手应该很快。

条件语句

条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test

if

先来个实例:

x=5;

if [ $x = 5 ]; then
    echo 'x equals 5.';
else
    echo 'x does not equal 5';
fi

# 输出: x equals 5.

和我们熟悉的语言非常相似,不妨抽象一下:

if commands; then
    commands
[elif commands; then
    commands...]
[else
    commands]
fi

这就是 if 的基本语法,其中紧接在 ifelif 后面的 commands 多数时候为 Test

来个复杂一点的例子:

FILE=~/.zshrc # 随便找个路径
if [ -e "$FILE" ]; then # -e 单目操作符
    if [ -f "$FILE" ]; then
        echo "$FILE is a regular file."
    fi
    if [ -d "$FILE" ]; then
        echo "$FILE is a directory."
    fi
    if [ -r "$FILE" ]; then
        echo "$FILE is readable."
    fi
    if [ -w "$FILE" ]; then
        echo "$FILE is writable."
    fi
    if [ -x "$FILE" ]; then
        echo "$FILE is executable/searchable."
    fi
else
    echo "$FILE does not exist"
fi

这个例子中就有大量的 Test

case

case 其实就是我们熟悉的那个 swich ,但语法形式上有很大的不同。

case "$variable" in
    "$condition1" )
        command...
    ;;
    "$condition2" )
        command...
    ;;
esac
  • 双引号包裹变量,这不是必须的
  • 每一个 Test 语句,必须以 ) 结尾
  • 每一个条件区块,必须以 ;; 结尾
  • 整个 case 区块,必须以 esac 结尾——esac case spelled backwards

来个例子。

x=4

case $x in
    'a' )
        echo "x 是 a";;
    4 )
        echo "x 是 4";;
    'b' )
        echo "x 是 b"
esac

# x 是 4

总得来说, bash 中的条件语句, Test 是核心,ifcase 熟悉语法即可。

循环

bash 中有 forwhile 两种常见的循环体,我们应该都很熟悉。

for

直接上实例,批量修改文件名。

目录如下:

.
├── error_400.html
├── error_403.html
├── error_404.html
├── error_500.html
└── error_503.html

bash 代码:

for $i in `ls`
do
    mv $i ${i/html/ejs};
done

语法其实很明朗:

for variable [in words]; do
    commands
done
  • do 可以另起一行,如果和 for 同行,那么 for 语句必须 ; 结尾
  • 循环体必须 done 结尾
  • [in words] 取值很宽泛,可以是通配符,可以是一个命令(ls),一句话,必须是数组形式
for i in *
do
    echo $i;
done

## 会打印当前目录下的所有文件名

while

看个例子:

count=1
while [ $count -le 5 ]; do
    echo $count
    count=$((count + 1))
done
echo "Finished."

# 依次打印 1 - 5 和 finished

语法如下:

while commands; do commands; done

参考文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • bash 的条件和循环

    条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test 。

    IMWeb前端团队
  • html写法对gzip压缩率的影响

    前几天在群里看到小杜分享一篇文章,《html写法对gzip压缩率的影响》,为此我也对这点分析了一下。 不知道大家有没有看过这文章,作者是来自微博懒懒交流会,其内...

    IMWeb前端团队
  • html写法对gzip压缩率的影响

    前几天在群里看到小杜分享一篇文章,《html写法对gzip压缩率的影响》,为此我也对这点分析了一下。 不知道大家有没有看过这文章,作者是来自微博懒懒交流会,其内...

    IMWeb前端团队
  • bash 的条件和循环

    条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test 。

    IMWeb前端团队
  • 编程规范 写 if 语句不要任性

    在之前的文章编程规范_这个星球上最好的C编程风格中,介绍了猿届的辟邪剑谱,哦不,是独孤九剑,Google C++ Style Guide。编程规范而已,用不着自...

    twowinter
  • 聊聊Elasticsearch的NodesSniffer

    elasticsearch-7.0.1/client/sniffer/src/main/java/org/elasticsearch/client/sniff/...

    codecraft
  • shell中字符串比较和模糊比较说明

        2、两边的双引号都是可有可无的,但当字符串为空的时候就会报错,提示unary operator expected,因此,需要加入双引号;

    党志强
  • 聊聊Elasticsearch的NodesSniffer

    elasticsearch-7.0.1/client/sniffer/src/main/java/org/elasticsearch/client/sniff/...

    codecraft
  • if判断与比较操作符gt、lt、eq等的使用

    PS:使用if判断时,需要在判断结束处填入"fi",表示if语句块的结束 例如: if [ $ACTION = "add"] then .....

    张诺谦
  • 【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了

    字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细...

    帅地

扫码关注云+社区

领取腾讯云代金券