一、脚本规范
1. shebang
在 .sh
的脚本开头第一行必须加上 shebang:
#!/bin/bash
用于脚本的执行语言,由于 Shell 并不是只有 bash 一种,我们在操作系统中使用相对路径 ./script.sh
或者绝对路径 /var/script.sh
这样的方式调用脚本的时候,只是会使用默认的脚本语言进行执行,但是如果默认的 shell 不一样,当然是会失败的,这个 shebang 就可以指定执行的语言,我们后面研究的全部都是 bash,所以这个 shebang 习惯上是不可以省略的。
实际上,shebang 的作用在于直接执行这个脚本文件的时候,告诉操作系统用哪个程序来执行它,例如我们写了一个 python 脚本 /var/script.py
,并且具有执行权限,这个时候,如果我们没有在头部给出 shebang,那么 linux 会使用 bash 来执行这个 .py
脚本,最终导致失败,这时候,如果我们在脚本第一行加上 #!/bin/python3
这样的 shebang,就可以成功运行这个脚本。
只有当前用户具备脚本文件的执行权限的时候,才可以直接通过相对路径或者绝对路径执行脚本。
又或者可以使用 bash,将文件路径作为参数输入来执行脚本:
bash script.sh
# 的读法是 sharp/hash/mesh,! 的读法是 bang,shebang 等于是这两个名字的合体
2. 启动脚本
在启动脚本之前,~/.bashrc
会被执行,登录 shell 时会执行 ~/.bash_profile
,~/.bash_history
则保留了用户运行过的 shell 脚本。
练习题: 1. 尝试在
~/.bashrc
,~/.bash_profile
,~/.bash_history
里面加入代码,查看运行的范围
3. 语法规则
命令以换行或者分号 ;
作为分隔
$ cmd1 ; cmd2
和下面是一样的:
$ cmd1
$ cmd2
注释用 # 开始,延续到行末
二、终端打印
1. echo
命令
使用 echo
命令输出后面会自动添加换行
例子:
echo "Welcome to bash"
echo welcome to Bash
echo 'text in quotes'
不加引号的情况下特殊字符的转义要在前面添加反斜杠 \
echo Hello;
echo Hello\;
echo ";"
echo "\;"
echo Script # comment
echo Script \#comment
在 echo
中使用 -n
选项可以忽略结尾的换行符;
echo
默认情况下引号内容不转移,加上 -e
会转移引号内的转义字符;
2. 使用 printf 语句
类似于 C 的 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 Sarath 80.35
# 2 James 91.00
# 3 Jeff 77.56
可以使用的格式字符串以及转义字符可以仔细阅读 man printf
了解。
3. 彩色输出
前景颜色码:
编号 | 颜色 |
---|---|
0 | 重置 |
30 | 黑色 |
31 | 红色 |
32 | 绿色 |
33 | 黄色 |
34 | 蓝色 |
35 | 洋红 |
36 | 青色 |
37 | 白色 |
背景颜色码:
编号 | 颜色 |
---|---|
0 | 重置 |
40 | 黑色 |
41 | 红色 |
42 | 绿色 |
43 | 黄色 |
44 | 蓝色 |
45 | 洋红 |
46 | 青色 |
47 | 白色 |
使用 printf
或者 echo -e
可以识别设置输出文本格式的转义:
echo -e ”\e[1;33;44mhello\e[0m“
printf -e ”\e[1;33;44mhello\e[0m\n“
以上两句效果都一样,都是输出一行前景色为黄色背景色为蓝色的加粗 hello,并且输出完之后重置格式。
可以看到,一个格式设置转义符为 \e[??;??;??m
,其中不同的格式选项可以用分号隔开,顺序也是可以调乱的,支持多个。
前面的 1
代表是加粗,33
是前景色 44
是背景色,0
当然是重置,对于 1-9 的格式,含义如下:
格式码:
编号 | 格式 |
---|---|
1 | 加粗 |
2 | 变暗 |
3 | 斜体 |
4 | 下划线 |
5 | ?? |
6 | ?? |
7 | 前景和背景色互换 |
8 | 前景色采用背景色 |
9 | 中划线 |
可以将格式预定义为变量然后使用:http://stackoverflow.com/a/13055108/2544762
【精】更多的格式可参考:https://wiki.archlinux.org/index.php/Color_Bash_Prompt#List_of_colors_for_prompt_and_Bash
【转载请附】愿以此功德,回向 >>
原文链接:http://www.huangwenchao.com.cn/2015/11/bash-shell-1.html【每日一Shell(1) 交通规则】