每日一Shell(1) 交通规则

一、脚本规范

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


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2015/11/bash-shell-1.html【每日一Shell(1) 交通规则】

发表评论

电子邮件地址不会被公开。 必填项已用*标注