Linux Shell脚本学习(1)

1.1起源:

1.20世纪60年代,计算机支持交互式终端。

2.贝尔实验室,Unix操作系统可以从文本文件(称为shell脚本)中读取并执行文件,刚开始只支持一种交互式终端,Bourne Shell(sh)

3.1989年,GNU项目吸收了大量其他用户界面特性,编写出了一种全新的shell,Bourne Again Shell(bash),bash shell与Bourne Shell完全兼容。

4.随着linux成为最流行的类Unix操作系统,bash shell也变成了Unix和Linux中既成事实的标准shell

1.2在终端中显示输出

1.2.1基础知识:

shell通过终端会话同shell环境打交道,打开终端后会有命令提示符,通常为username@hostname$也可以配置成root@hostname#,或者简单显示为$或者#  $代表普通用户,#代表管理员用户root,root是权限最高的用户

shell脚本通常以shebang作为起始,是一个文本行,只能在脚本的第一行。shebang就是定义用来解释脚本的解释器

脚本执行有两种方式:

(1)将脚本名作为命令行参数(这种方式可以不用shebang)

bash zhy.sh

(2)授予脚本执行权限,将其变为可执行文件:(这种方式需要用shebang的解释器来解释脚本,内核会读取脚本首行,并注意到shebang为#!/bin/bash,会识别并执行脚本/bin/bash zhy.sh)。

chmod 755 zhy.sh

./zhy.sh(可以用相对路径也可以用绝对路径)

启动shell时会用用户主目录中的脚本文件~/.bashrc(对于登陆shell则是~./bash_profile)来初始化提示文本、颜色等设置。

Bash shell还维护了一个历史记录文件~./bash_history用于保存用户运行过的命令

~表示主目录,通常为/home/user user是用户名,如果是root用户则为/root  ,登陆shell是登陆主机后创建的shell,但登陆图形化环境后所创建的终端回话并不是登陆shell,使用GNOME或KDE这类显示管理器登陆后并不会读取.profile或.bash_profile(绝大多数情况下不会),而使用ssh登陆远程系统时会读取.profille。shell使用分号或换行符来分隔单个命令或命令序列

$cmd1;cmd2

$cmd1

$cmd2

这两种写法等价

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

1.2.2 实战演练

echo默认情况下每次调用一次之后会添加一个换行符:

$echo "Welcome to Bash"

Welcome to Bash

实现相同效果的另一种方式是使用单引号:

$echo 'text in quotes'

这些方法看起来很相似,但各有优缺点,双引号允许shell解释字符串中出现的特殊字符。单引号不会对其做出任何解释。

$echo "cannot include exclamation - ! within double quotes"

命令输出如下:

bash: !:event not found error

如果需要打印像!这样的特殊字符,就将其放在单引号或者在特殊字符前面加一个反斜线(\)

$echo Hello world!

或者

$echo 'Hello world'

或者

$echo "Hello world \!"

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

echo hello;hello 这个命令,Bash将echo hello作为一个命令,将hello作为另一个命令

另一个终端可打印命令是printf  和c语言中的printf一样printf "Hello world"

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

#!/bin/bash

#文件名: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

1.2.3工作原理

%s ,%c,%d,%f都是格式替换符,%-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐),如果不指明-,字符串就采用右对齐形式。宽度指定了保留给某个字符串的字符数量。对Name而言,其保留宽度是10,Name字段的保留宽度是10,里面的内容都会被显示在10字符宽的保留区域内,不足10字符用空格填充

最后的浮点数.2f保留两位小数\n是换行

1.2.4内容补充

echo和printf要确保在所有字符串之前,否则Bash会将其视为另一个字符串

1.在echo中转义换行符

默认情况下。echo会在输出文本的尾部追加一个换行符,可以使用-n来禁止这种行为。echo同样接受双包含转义序列的双引号字符串作为参数。在使用转义序列时,需要使用echo -e "包含转义序列的字符串"例如:

echo -e "1\t2\t3"

1   2   3

2.打印彩色输出

脚本可以使用转义序列在终端中生成彩色文本。

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

要打印彩色文本,可输入如下命令:

echo -e "\e[1;31m This is red text \e[0m"     \e[0;30m置换为黑色

\e[1;31m是一个转义字符串,可以将颜色设为红色,\e[0m将颜色重新置回,只需要将31替换成想要的色彩码就可以了。

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

想要设置彩色背景,可以输入下面命令

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

 

 

你可能感兴趣的:(菜鸟笔记)