最近在看linux shell脚本相关的英文资料,一时手痒,分享一下书籍的翻译版
一、在终端输出信息
1、一个典型的shell脚本文件开始格式为:
#!/bin/bash
2、运行
"#"字符用来注释从它到它所在行末尾信息
1)运行shell脚本一共有两种方法,通过sh命令运行
$ sh script.sh #如果脚本在当前文件夹
或者
$ sh /home/path/script.sh #使用全路径
2)给所有人加上可执行权限
$ chmod a+x script.sh
脚本可通过以下方式执行:
$ ./script.sh # ./代表当前文件夹
#或者
$ /home/path/script.sh #全路径
shell程序会先读取shell文件的首行,判断是否以#!/bin/bash开头来决定是否为shell文件。shell文件会通过/bin/bash验证以及执行内部脚本如下:
$ /bin/bash script.sh
在bash里,每一条指令都会被分号或者新的行分割
$ cmd1 ; cmd2
相当于
$ cmd1
$ cmd2
3)终端输出命令echo
a、我们可以不用双引号使用echo命令输出字符串,但我们不能使用分号用来分割命令
b、echo hello; hello :表示两条命令,一条为echo hell 一条为hello
c、当我们用单引号使用echo命令输出字符串,例如,$var不会被赋值
$ echo '$var' #将会返回$var
不使用单引号
$ echo $var #将会输出$var变量的值,若他没有定义,则什么也不输出
举例:
$ echo "Welcome to Bash"
Welcome to Bash
若没有双引号,它也会正常输出
$ echo Welcome to Bash
Welcome to Bash
使用单引号也可以正常输出
$ echo 'text in quote'
若在打印字符串用双引号包含,且字符串中包含“!”字符,需使用“\”前缀装饰
$ echo Hello Wrold !
$ echo 'Hello World !'
$ echo "Hello World \!"
4)另一种中断输出命令printf
与c语言的使用方式相同,例如
$ pritnf "Hello world"
printf接收由空格分割的带引号的字符串。我们可以使用格式化字符,我们也可以明确字符串长度,左对齐或右对齐等。默认情况下,printf不会像echo一样在新的一行输出结果。如果需要,我们可以明确在新的一行输出结果。就想以下脚本一样:
#!/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
%s,%c,%d和%f都是替换字符,可以双引号后面的字符串填充
%-5s描述一个字符串用左对齐方式(- 代表左对齐)以及字符串的宽度为5个字符。如果没有明确“-”字符,字符串将会以右对齐的方式输出。明确的宽度字符,在变量长度不满10个字符时,会通过空格填满10个字符。
float型字符串,我们可以对传入的参数进行四舍五入计算。%-4.2f,中的.2表示保留两位小数。\n表示换行命令
默认情况下,echo会自动在输出结果追加新行。这个也可用通过使用-n标志避免。对于通过双引号括起来的字符串echo命令也可以使用转移字符。关于使用转移序列,使用echo相当于使用echo -e “string containing escape sequences”,例如
echo -e "1\t2\t3"
123
5)带颜色的输出
我们可以通过使用转义码进行带颜色的输出。
颜色码被用来体现每一种颜色。例如:reset=0,black=30,red=31,green=32,yellow=33,blue=34,magenta=35,cyan=36,and white=37.
按以下输入,会输出带颜色的字体
echo -e "\e[1;31m This is red text \e[0m"
在这里\e[1;31m 是设置字符为红色字体的转义字符串,\e[0m是设置颜色的截止位置。
可以用任意颜色码代替31
关于常用的背景色,reset=0,black=40,red=41,yellow=43,blue=44,magenta=45,cyan=46,and white=47;
按一下输入,会输出带背景色的输出。
echo -e "\e[1;42m Green Background \e[0m"