Bash 脚本教程(二)基本语法

1. echo 命令

echo命令的作用是在屏幕输出一行文本,可以将该命令的参数原样输出。

[root@VM-4-17-centos ~]# echo hello world
hello world

上面例子中,echo的参数是hello world,可以原样输出。


如果想要输出的是多行文本,即包括换行符。这时就需要把多行文本放在引号里面

$ echo "<HTML>
    <HEAD>
          <TITLE>Page Title</TITLE>
    </HEAD>
    <BODY>
          Page body.
    </BODY>
</HTML>"

上面例子中,echo可以原样输出多行文本。

1.1 -n 参数

默认情况下,echo输出的文本末尾会有一个回车符。-n参数可以取消末尾的回车符,使得下一个提示符紧跟在输出内容的后面。

[root@VM-4-17-centos ~]# echo -n hello world
hello world[root@VM-4-17-centos ~]#
[root@VM-4-17-centos ~]# echo -n a;echo b
ab

1.2 -e 参数

-e参数会解释引号(双引号和单引号)里面的特殊字符(比如换行符\n)。如果不使用-e参数,即默认情况下,引号会让特殊字符变成普通字符,echo不解释它们,原样输出。

[root@VM-4-17-centos ~]# echo "Hello\nWorld"
Hello\nWorld
[root@VM-4-17-centos ~]# echo -e "Hello\nWorld"
Hello
World
[root@VM-4-17-centos ~]# echo -e 'Hello\nWorld'
Hello
World

2. 命令格式

命令行环境中,主要通过使用 Shell 命令,进行各种操作。Shell 命令基本都是下面的格式。

command [ arg1 ... [ argN ]]

上面代码中,command是具体的命令或者一个可执行文件,arg1 ... argN是传递给命令的参数,它们是可选的。

下面这个命令中,ls是命令,-l是参数:

ls -l

有些参数是命令的配置项,这些配置项一般都以一个连词线开头,比如上面的-l。同一个配置项往往有长和短两种形式,比如-l是短形式--list是长形式,它们的作用完全相同。短形式便于手动输入,长形式一般用在脚本之中,可读性更好,利于解释自身的含义。


Bash 单个命令一般都是一行,用户按下回车键,就开始执行。有些命令比较长,写成多行会有利于阅读和编辑,这时可以在每一行的结尾加上反斜杠(\),Bash 就会将下一行跟当前行放在一起解释。

[root@VM-4-17-centos ~]# echo foo bar
foo bar
[root@VM-4-17-centos ~]# echo foo \
> bar
foo bar

3. 空格

Bash 使用空格(或 Tab 键)区分不同的参数。

[root@VM-4-17-centos ~]# command foo bar

上面命令中,foo和bar之间有一个空格,所以 Bash 认为它们是两个参数。

如果参数之间有多个空格,Bash 会自动忽略多余的空格。

[root@VM-4-17-centos ~]# echo this is a     test
this is a test

上面命令中,a和test之间有多个空格,Bash 会忽略多余的空格。

4. 分号

分号;)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令。

[root@VM-4-17-centos ~]# clear; ls

上面例子中,Bash 先执行clear命令,执行完成后,再执行ls命令。

注意,使用分号时,第二个命令总是接着第一个命令执行,不管第一个命令执行成功或失败。

5. 命令的组合符&&和||

除了分号,Bash 还提供两个命令组合符&&||,允许更好地控制多个命令之间的继发关系。

Command1 && Command2

上面命令的意思是,如果Command1命令运行成功,则继续运行Command2命令。

Command1 || Command2

上面命令的意思是,如果Command1命令运行失败,则继续运行Command2命令。

下面是一些例子:

[root@VM-4-17-centos ~]# cat filelist.txt ; ls -l filelist.txt

上面例子中,只要cat命令执行结束,不管成功或失败,都会继续执行ls命令。

[root@VM-4-17-centos ~]# cat filelist.txt && ls -l filelist.txt

上面例子中,只有cat命令执行成功,才会继续执行ls命令。如果cat执行失败(比如不存在文件flielist.txt),那么ls命令就不会执行。

[root@VM-4-17-centos ~]# mkdir foo || mkdir bar

上面例子中,只有mkdir foo命令执行失败(比如foo目录已经存在),才会继续执行mkdir bar命令。如果mkdir foo命令执行成功,就不会创建bar目录了。

6. type 命令

Bash 本身内置了很多命令,同时也可以执行外部程序。怎么知道一个命令是内置命令,还是外部程序呢?

type命令用来判断命令的来源,如下:

[root@VM-4-17-centos ~]# type echo
echo is a shell builtin

type命令告诉我们,echo是内部命令。


如果要查看一个命令的所有定义,可以使用type命令的-a参数,如下:

[root@VM-4-17-centos ~]# type -a echo
echo is a shell builtin
echo is /usr/bin/echo

上面代码表示,echo命令既是内置命令,也有对应的外部程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值