命令都是在终端会话中输入并执行的。打开终端时会出现一个提示符。

username@hostname$

$表示普通用户,#表示管理员用户root。root是Linux系统中权限最高的用户。

推荐使用普通用户(shell会在提示符中以$来表明这种身份)登录系统,然后借助sudo这类工具来运行特权命令。使用sudo <command> <argument>执行的效果和root一样

shell脚本通常以shebang起始

#!/bin/bash

shebang是一个文本行,其中#!位于解释器路径之前。/bin/bash是Bash的解释器命令途径。Bash将以#符号开头的行视为注释。脚本中只有第一行可以使用shebang来定义解释该脚本所使用的解释器

脚本的执行方式有两种
1、将脚本名作为命令行参数

bash myScript.sh

2、授予脚本执行权限,将其变为可执行文件

chmod 755 myScript.sh
./myScript.sh

如果将脚本作为bash的命令行参数来运行,那么就用不着使用shebang看

使用chmod命令赋予脚本可执行权限

$ chmod a+x sample.sh

该命令是的所有用户可以按照下列方式执行该脚本

$ ./sample.sh 
$/home/path/sample.sh

内核会读取脚本的首行并注意到shebang为#! /bin/bash。它会识别出/bin/bash并执行该脚本

$ /bin/bash sample.sh

当启动一个交互式shell时,它会执行一组命令来初始化提示文本、颜色等设置。这组命令来自用户主目录中的脚本文件 ~/.bashrc(对于登录shell则是~/.bashrc)。Bash shell还维护了一个历史记录文件~/.bash_history,用于保存用户运行过的命令

shell使用分号或换行符来分隔单个命令或命令序列

$ cmd1 ; cmd2

这等同于

$ cmd1
$ cmd2

注释部分以#为开始,一直延续到行尾。注释行通常用于描述代码或是在调试期间金制执行某行代码

# sample.sh - echoes "hello world"
echo "hello world"

echo

echo是用于终端打印的最基本命令
默认情况下,echo在每次调用后会添加一个换行符

$ echo "Welcome to Bash"
Welcome to Bash

打印内容可以放在:

  1. 双引号中
  2. 单引号中
  3. 无引号
$ echo Welcome to Bash
Welcome to Bash

$ echo 'text in quotes'

双引号允许shell解释字符串中出现的特殊字符,单引号不会对其做任何解释

如果需要打印像!这样的特殊字符,就不要将其放入双引号中,而是使用单引号,或是在特殊字符之前加上一个反斜线(\)

$ echo Hello world !
$ echo 'Hello world !'
$ echo "Hello world \!"

如果不使用引号,则无法在echo中使用分号,因为分号在Bash shell中用作命令间的分隔符

echo hello; hello # echo hello为一个命令,hello为另外一个命令

1. 在echo中转移换行符

echo在默认情况下会在输出文本的尾部追加一个换行符,可以使用-n选项来禁止
使用-e选项来转义序列

$ echo -e "1\t2\t3"
1	2	3

2. 打印彩色输出

文本颜色是由对应的色彩码来描述的,其中包括:重置=0,黑色=30,红色=21,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

$ echo -e "\e[1;31m This is red text \e[0m"

其中\e[1;31m是一个转义字符,可以将颜色设为红色,\e[0m将颜色重新置回

对于彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47

$ echo -e "\e[1;42m Green Background \e[0m"

可以使用man console_codes来查看相关文档

printf

$ printf "Hello world"

printf命令接受引用文本或由空格分隔的参数,可以在printf中使用格式化字符串来指定字符串的宽度、左右对齐方式等。默认情况下,printf并不会自动添加换行符。

#!/bin/bash
# filename: printf.sh

printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
printf "%-5s %-10s %-4.2f\n" 2 James 90.9989
printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564

# No Name Mark
# 1 Sarah 80.35
# 2 james 91.00
# 3 Jeff 77.56

%s %c %d %f都是格式替换符(format substitution character),它们定义了该如何打印后续参数。%-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐),默认采取右对齐形式。宽度指定了保留给某个字符串的字符数量。如果内容不足,则用空格填充

对于浮点数,可以使用其它参数对小数部分进行舍入(round off)
%-4.2f中的.2指定保留两位小数

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐