`
阿男bluedash
  • 浏览: 168805 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Bash编程入门(三)

    博客分类:
  • Bash
阅读更多
Shell编程很有趣,Shell编程很复杂,Shell编程离我们很近又似乎很远:使用Linux离不开它,但似乎又不曾仔细了解它。这套文章的目的是带你走进Shell编程的大门 ,领略它的丰富多彩。

* 本节讲解内容:括号

* 本节使用的shell版本为:

GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.


* 所有本节讲解的内容,都需要你自己动手操作才能明白其含义

* 本文中所用到的所有命令,使用如下格式:

$ <some_command>
<output result>


() parentheses

小括号有多种功用,下面一一说明:

* 封装命令输出

$ echo $(pwd)
/Users/liweinan


在Bash下面,也可以用反引号:

$ echo `pwd`
/Users/liweinan


但是使用括号的好处是可以嵌套:

$ echo $(ls $(pwd))
Desktop Documents Downloads Games Library Movies Music Pictures Public Sites


* 开启一个Sub-Shell

举个例子,假设有下面这段代码:

name=abc

printf "name is %s\n" $name


程序输出如下:

name is  abc


如果我们这样:

(
	name=abc
)

printf "name is %s\n" $name


程序输出:

name is


可以看到,括号里面的代码,和括号外面的代码,在不同的Shell环境当中。即:

* 括号开启了一个Sub-Shell

[] brackets

中括号在Shell中的用处如下:

* 正则表达式匹配

例子:

ls -1 Xee.[jp][pn]g
Xee.jng
Xee.jpg
Xee.png
Xee.ppg


* 判断操作符

这个是方括号在Shell中的主要功能,结合一些参数,形成判断条件,比如:

str=a

if [ -n $str ]; then
	echo "str exists"
else
	echo "str not exists"
fi


运行上面的脚本,输出如下:

str exists


-n 用来判断$str是否不为空,相当于!=null,方括号里面支持很多这种判断命令,比如:

[ -z $str ]


代表判断$str是否为空,相当于==null。

注意Shell中判断相等用的是=,而不是两个等号==:

[ $str1 = $str2 ]


通过上面学到的知识,试试看猜猜下面这个例子的运行结果:

str1=a
str2=b

if [ str1=str2 ]; then
	echo "str1=str2"
fi

if [ $str1=$str2 ]; then
	echo "$str1=$str2"
fi

if [ $str1 = $str2 ]; then
	echo "$str1 = $str2"
fi


我们赋值str1为'a',str2为'b',然后下面的三段,看起来条件应该都不成立,于是没有输出,实际上是这样吗?运行上面的脚本,结果如下:

str1=str2
a=b


这是怎么回事?我们一个一个来看:

if [ str1=str2 ]; then
	echo "str1=str2"
fi


在这里,str1实际上是一个字串'str1',而并不是str1这个变量,引用变量要用$。因此,方括号里面的代码含义为:'str1'='str2',将str2这个字串赋值给str1,虽然这没有什么意义, 但是它可以正常执行,因此if判断为真,代码被执行了。

接下来看第二、三段,它们唯一的区别是等号两边有没有空格:

...
if [ $str1=$str2 ]; then
...
if [ $str1 = $str2 ]; then
...


* 在shell中,等号两边的空格很重要。

$str1=$str2的含义是将$str2的值赋给$str1,$str1 = $str2才是判断是否相等。

{} braces

大括号可用于重定向程序的输入输出:

{
	printf a
	printf b
	printf c
} > abc


上面的代码将会把大括号里的输出重定向输出到名为abc的文件中。执行上面的代码,获得abc文件:

$ cat abc
abc


使用上面生成的abc文件,做一个输入的例子:

{ while read line; do
        echo $line
  done
} < abc


通过read命令,我们将abc文件中的内容读入并显示出来。

字串扩展

大括号可用于字串的扩展:

$ echo {a,b,c}
a b c


$ echo {1..3}
1 2 3



分享到:
评论

相关推荐

    BASH脚本编程入门

    BASH脚本编程入门 很好的入门书籍 30分钟搞定BASH脚本编程 一个最简单的脚本 这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程. 在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。

    bash快速入门,适合新手

    ### Bash快速入门:适合新手的关键知识点 #### 一、Bash简介与脚本启动行 Bash(Bourne-Again SHell)是Unix和Linux系统中最常用的命令解释器之一,它不仅...希望本文提供的关键知识点能帮助你快速入门Bash脚本编程。

    高级Bash编程

    ### 高级Bash编程知识点概述 #### 一、引言 本教程旨在为初学者提供一条通往高级Bash编程的道路。它不仅适用于自学,也是课堂教学的理想材料,尤其是在教授编程概念方面。通过丰富的实例和练习,读者将逐步掌握...

    Linux-Bash-Shell快速入门

    本文将详细介绍Linux Bash Shell的基本知识和编程方法,为初学者快速入门提供帮助。 首先,我们需要了解BASH的基本语法。BASH的基本语法中,最简单的例子莫过于“Hello World”。通过这个例子,我们可以初步认识...

    Qt编程入门(2).pdf

    ### Qt编程入门:Linux环境下的Hello World实例解析 在深入探讨Qt编程的奥秘之前,让我们从一个经典的起点——“Hello World”程序开始。对于初学者而言,这不仅是熟悉编程环境的一个基本步骤,也是理解Qt框架如何...

    Python快速编程入门的课后习题答案(本人原创,通过测试完整准确)

    "Python快速编程入门的课后习题答案" Python 是一种高级的、解释性的编程语言,具有简单易学、开源、高级语言、可移植性、解释性、面向对象、可扩展性、丰富的库、规范的代码等特点。 Python 可以应用在 web 应用...

    shell编程入门教程

    shell 编程入门教程 shell 编程是 Linux 操作系统中的一个重要组件,它允许用户输入命令并将其执行, shell 编程有两种执行命令的方式:交互式(Interactive)和批处理(Batch)。在 shell 编程中,有变量、流程...

    高级bash脚本编程

    - **书籍结构**:书籍分为三部分——热身、基本和超越基本,分别对应初学者入门、核心概念与语法、以及高级技巧与应用,层层递进,适合系统性学习。 - **章节简介**:书籍章节涵盖了shell编程的理由、基本语法如...

    bash入门学习实例

    **Bash 入门学习实例** Bash,全称是“Bourne-Again SHell”,是Unix和类Unix系统中最常用的命令行解释器。它不仅是一个交互式shell,还是脚本编程语言,广泛用于Linux和macOS系统。这篇教程将通过一系列实例,帮助...

    linux bash shell入门教程

    本教程将从基础入门开始,介绍Bash Shell的基本语法、函数、变量、运算符和调试等内容,帮助读者建立起扎实的Linux编程基础。 首先,编写一个最简单的Hello World程序是学习任何编程语言的第一步,同样也适用于学习...

    bash语言编程说明

    Bash 的入门通常是通过经典的 “Hello World” 程序。以下是一个简单的示例: ```bash #!/bin/bash # This is a very simple example echo "Hello World" ``` - **第一行 `#!/bin/bash`**:这是脚本的 shebang 行,...

    linux 编程教程 -- linux下编程入门

    Linux编程教程——Linux下编程入门 在Linux操作系统中进行编程是一项重要的技能,尤其对于系统级开发者和软件工程师来说。Linux提供了丰富的开发环境和工具,支持多种编程语言,如C、C++、Python、Java等。本教程将...

Global site tag (gtag.js) - Google Analytics