跳转到内容

Bash基本语法

echo命令

echo命令用于在终端输出文本或变量的值。它是一个非常常用的命令,通常用于调试脚本或显示信息。作用是在屏幕输出一行文本,可以将该命令的参数原样输出。

Terminal window
echo hello world
hello world

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

Terminal window
echo "<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide"><img src="./image/sku-13811216-01.png"></div>
<div class="swiper-slide"><img src="./image/sku-13811216-02.png"></div>
<div class="swiper-slide"><img src="./image/sku-13811216-03.png"></div>
</div>
<div class="swiper-pagination"></div>
</div>"

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

-n 参数

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

Terminal window
echo -n hello world
hello world$
Terminal window
echo a;echo b
a
b
echo -n a;echo b
ab

例子中,-n参数可以让2个echo命令的输出连在一起,出现在同一行

-e 参数

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

Terminal window
echo "Hello\nWorld"
Hello\nWorld
# 双引号的情况
echo -e "Hello\nWorld"
Hello
World
# 单引号的情况
echo -e 'Hello\nWorld'
Hello
World

命令格式

命令行环境中,主要通过使用Shell命令。进行各种操作。Shell命令的格式如下:

Terminal window
command [ arg1 ... [ argN ]]

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

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

Terminal window
echo foo bar
# 等同于
echo foo \
bar

空格

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

Terminal window
command foot bar

命令中的,foot和bar之间有一个空格,所以Bash认为它们是两个参数。 如果参数之间有多个空格,Bash会自动忽略多余的空格。

Terminal window
echo this is a test
this is a test

分号

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

Terminal window
clear;ls -l

例子中,Bash先执行clear命令,执行完成后,再执行ls -l命令。 注意,使用分号时,第二个命令总是接着第一个命令的执行,不管第一个命令执行是成功还是失败。

命令的组合符&&||

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

Command1 && Command2

上述命令的含义是,如果命令Command1执行成功,则继续执行Command2命令。

Command1 || Command2

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

下面是一些例子:

Terminal window
cat text.txt; ls -l

只要cat命令执行结束,不管成功或者失败,都会继续执行ls -l命令

Terminal window
cat text.txt && ls -l

只要cat命令执行成功,才会继续执行ls -l命令,如果cat命令执行失败(比如不存在文件text.txt),那么ls命令就不会执行。

Terminal window
cat text.txt || ls -l

只有cat命令执行失败(比如不存在text.txt),才会继续执行ls -l命令,如果cat命令执行成功,ls命令就不会执行。

type命令

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

type命令用来判断命令的来源

Terminal window
type echo
echo is a shell builtin
type ls
ls is hashed (/bin/ls)

上面代码中,type命令告诉我们,echo是内部命令,ls是外部程序(/bin/ls)

type命令本身也是内置的命令。 如果要查看一个命令的所有定义,可以使用type命令的-a参数

Terminal window
type -a echo
echo is a shell builtin
echo is /bin/echo

echo命令即是内置命令,也有对应的外部程序。

type命令的-t 参数,可以返回一个命令的类型:别名(alias),关键词(keyword),函数(function),内置命令(builtin)和文件(file)

Terminal window
type -t bash
file
type -t if
keyword

bash是文件,if是关键词。

快捷键

  • Ctrl + L:清除屏幕并将当前行移动到页面顶部
  • Ctrl + C:中止当前正在执行的命令
  • Shift + PageUp:向上滚动
  • Shift + PageDown:向下滚动
  • Ctrl + U:从光标位置删除到行首
  • Ctrl + K:从光标位置删除到行尾
  • Ctrl + W:删除光标位置前一个单词
  • Ctrl + D:关闭Shell会话

除了上面的快捷键,Bash 还具有自动补全功能。命令输入到一半的时候, 可以按下 Tab 键,Bash 会自动完成剩下的部分。比如,输入tou,然后按一下 Tab 键,Bash 会自动补上ch。

除了命令的自动补全,Bash 还支持路径的自动补全。有时,需要输入很长的路径, 这时只需要输入前面的部分,然后按下 Tab 键,就会自动补全后面的部分。 如果有多个可能的选择,按两次 Tab 键,Bash 会显示所有选项,让你选择