Skip to content

bash脚本编程速成

命令格式

shell命令基本都是command [ arg1 ... [ argN ]]这种形式的。command是某个命令或是一个可执行文件,后面的arg是可选参数。通常command --help可以看有哪些可选参数和含义。

比如

$ ls -l

这里ls是命令,-l是参数。 有些参数(比如这个-l)命令的配置项,配置项一般有长(--list)、短(-l)两种形式。

再比如

$ ls -lhta

配置项合并书写了。

多行的命令

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

$ echo foo bar

# 等同于
$ echo foo \
bar

空格

Bash 使用空格(或 Tab 键)区分不同的参数。 如果参数之间有多个空格,Bash 会自动忽略多余的空格。

分号

分号;是命令的结束符,使得一行可以放置多个命令,这一个命令执行结束后,再执行下一个。 使用分号时,命令总是顺序执行,不管前面的命令执行成功或失败

命令组合符 &&||

  • command1 && command2: 先执行1,若成功则执行2;若1失败了,则不执行2。
  • command1 || command2: 先执行1,若成功则不执行2;若1失败,则执行2。

type判断命令来源

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

$ type echo
echo is a shell builtin # echo是内部命令
$ type ls
ls is hashed (/bin/ls) # ls是外部程序
$ type type
type is a shell builtin # type是内部命令
  • -a:查看一个命令的所有定义。 bash $ type -a echo echo is shell builtin echo is /usr/bin/echo echo is /bin/echo echo命令既是内置命令,也有对应的外部程序。

  • -t:返回命令的类型,包括:别名(alias),关键词(keyword),函数(function),内置命令(builtin)和文件(file)。 bash $ 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 会话。
  • ↑,↓:浏览已执行命令的历史记录。
  • 命令和路径自动补全:命令、路径输到一半的时候,按Tab键Bash会补全剩下的部分。如果有多个可能的选择,按两次Tab,Bash会显示所有可能的选项。

echo输出

原样输出一行文本

$ echo hello world
hello world

输出多行文本要加单/双引号。

  • -n echo输出的文本末尾默认有一个换行符,加上-n可以取消换行符。
$ echo -n my name $USER; echo hhhhhhh
my name zhongying.ruhhhhhhh
  • -e解释引号内的的特殊字符(比如换行符\n)。如果不使用-e参数,即默认情况下,引号会让特殊字符变成普通字符,echo不解释它们,原样输出。
$ echo "my name \n$USER"; echo -e "hhhhhhh\n233333"
my name \nzhongying.ru
hhhhhhh
233333