(Gentoo)Bash示例,第一部分(3)

2021-09-24 20:39

$ MYFOO="chickensoup.tar.gz"

$ echo ${MYFOO%%.*}

chickensoup

$ echo ${MYFOO%.*}

chickensoup.tar

正如你所见,除了将匹配通配符从字符串末尾去除之外,%和%%变量扩展的选项和#和##没有什么不同。注意:如果你希望从末尾移除一个特殊的子串,则不能运用"*"字符:

代码 1.20: 从末尾移去字符

MYFOOD="chickensoup"

$ echo ${MYFOOD%%soup}

chicken

在这个例子中,既然只有一个匹配,我们使用"%%"或"%"也就不重要了。同时记住,如果你忘记了是使用"#"还是"%",请看键盘上的3,4,5键并猜出来。 我们可以运用其它形式的变量扩展来选择一个特殊的子串,它是基于一个特定的字符串偏移和长度。请尝试在bash下敲入下面几行: 代码 1.21: 选择一个特殊的子字符串

$ EXCLAIM=cowabunga

$ echo ${EXCLAIM:0:3}

cow

$ echo ${EXCLAIM:3:7}

(Gentoo)Bash示例,第一部分

abunga

这种形式的字符串拆分将十分简便;只需简单的用冒号分开指定字符的起始字符和子串的长度。

应用字符串拆分

现在我们已经学了拆分字符串的所有内容,让我们写一个简单的小shell脚本。我们的脚本将接受单个文件作为参数并打印出它是否是一个压缩档,它将在文件的结尾寻找模式".tar"。下面就是: 代码 1.22: mytar.sh──一个示例脚本

#!/bin/bash

if [ "${1##*.}" = "tar" ]

then

echo This appears to be a tarball.

else

echo At first glance, this does not appear to be a tarball. fi 要运行这个脚本,将它输入到几个叫mytar.sh,并敲入chmod 755 mytar.sh使它可执行。然后如下给他一个压缩档做试验:

代码 1.23: 尝试这个脚本

$ ./mytar.sh thisfile.tar

This appears to be a tarball.

$ ./mytar.sh thatfile.gz

At first glance, this does not appear to be a tarball.

好,它工作了,但是它不是很实用。在我们将它变得实用之前,先让我们看看上面用的"if"语句。其中,我们有一个布尔表达式。在bash中,"="比较操 作检查字符串是否相等。但是这布尔表达式真正测试的是什么呢?让我们看看左边。通过我们所学习的字符串拆分,"${1##*.}"将从包含环境变量"1" 的字符串起始处移除"*."的最长匹配,并返回结果。这将返回文件中最后一个"."之后的所有部分。很明显,如果一个文件以".tar"结尾,我们将获 取"tar"作为结果,条件也就为真。

你可能会吃惊环境变量"1"是在第一个位置。非常简单──$1是这个脚本的第一个命令行参数,$2是第二个,如此等等。好的,现在我们已经回顾乐这个函数,我们可以看一下"if"语句了。

If语句

(Gentoo)Bash示例,第一部分

像大多语言一样,bash有它自己的条件类型。当使用它们时,请准照上面的格式;它是使"if"和"then"在不同的行,"else"和结束处必须的"fi"和它们水平对齐。这使代码易于阅读和调试。除了"if,else"形式,"if"语句还有很多其它形式: 代码 1.24: if语句的基本结构

if [ condition ]

then

action

fi

只有当condition为真的,它才会执行一个动作,否则它不执行任何动作并继续执行直到"fi"的行。 代码 1.25: 在继续fi之后的命令之前检查状况

if [ condition ]

then

action

elif [ condition2 ]

then

action2

.

.

.

elif [ condition3 ]

then

else

actionx

fi

上面的"elif"序列将连续测试每一个condition并执行第一个真的condition所相应的动作。如果没有condition是真,它将执行"else"动作,如果有一个为真,它将继续执行所有接下来的"if,elif,else"语句。

下一次

现在我们已经涵盖了大部分的基本的bash功能,是时候加快脚步准备书写一些真正的脚本了。在下一部分中,我将讲述循环结构,函数,命名空间和其它重要的 话题。接下来我们将准备写更多的复杂的脚本。在第三篇文章中,我们将重点集中在非常复杂的脚本和函数上,正如很多bash脚本设计选项一样。到时候再见!

2. 资源

(Gentoo)Bash示例,第一部分

有用的链接

请阅读 请阅读 访问


(Gentoo)Bash示例,第一部分(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:英语素材大学第一期

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: