《Shell脚本学习指南》第2章 入门

一、脚本编程语言的例子

awk,Perl,Python,Ruby,Shell

二、Shell中执行可执行文件

Shell中执行可执行文件有两种情况。

2.1、可执行文件是一个二进制文件

二进制文件:编译“使用编译语言编写得到的源代码”得到的二进制文件。在这种情形中,Shell会申请创建一个进程,在该进程中执行该可执行文件。
假如现在有如下这样一段C程序代码(文件名为:“a.c”):

#include<stdio.h>
int main()
{
    printf("Hello World");
    return 0;
}

执行gcc a.c命令,编译得到一个名为“a.out”的可执行文件。在Shell中执行./a.out命令,Shell会创建一个进程,在该进程中执行“a.out”这个二进制文件,最后打印“Hello World”。

2.2、可执行文件是一个脚本文件

脚本文件:由某种脚本语言编写得到的文本文件。在这种情形中,Shell会申请创建一个进程,在该进程中执行脚本文件。具体来说是:在进程中,内核会去加载该脚本文件的第一行,并认为“#!”后的字符串中指定了需要加载的脚本语言解释器的路径和需要传入的参数,然后接着通过加载的脚本语言解释器来解释执行本脚本文件的内容。
假如现在有如下这样一段脚本代码片段(文件名为:“a.sh”):

#!/bin/bash -i
echo "Hello World"

在Shell中执行./a.sh命令,Shell会创建一个进程,在该进程中最终执行/bin/bash -i ./a.sh命令,最后打印“Hello World”。
又有如下这样一段脚本代码片段(文件名为:“a.py”):

#!/usr/bin/python
print "Hello World"

在Shell中执行./a.py命令,Shell会创建一个进程,在该进程中最终执行/usr/bin/python ./a.py命令,最后打印“Hello World”。

三、Shell的基本元素

3.1、命令与参数

命令一般包括“命令名称,独立参数和选项”。“命令名称”是必需的,“独立参数”是可选的,“选项”是可选的。另外,根据“选项”是否带有参数,“选项”可分为“带参选项”和“无参选项”;根据“选项”的开头字符的不同,“选项”可分为“短选项(以“-”开头)”和“长选项(以“–”开头)”。
比如有如下这些命令例子:

#命令名称
ls 
#命令名称,独立参数
rm a.txt
#命令名称,无参短选项,独立参数
rm -f b.txt
#命令名称,带参短选项,独立参数
gcc -o whizprog whizprog.c
#命令名称,无参长选项
patch --verbose

可以以“–”来表示选项的结尾,接下来的内容都将被作为参数处理。这个的作用在于可以用来避免某种欺骗式攻击。
以空白(Space键或者Tab键)隔开命令行中各个组成部分;以“;”分隔同一行的多条命令;使用“&”号可以使得Shell在后台执行其前面的命令,而不用等到该命令完成,就可以继续执行下一个命令。

3.2、变量

变量的默认值为“NULL”。
在变量赋值表达式中,一般情况下,右值可在双引号内,也可不在双引号内。为了简单,统一规定置于双引号内。
因此最后的赋值表达式的形式为:

变量名="字符串值"

其中“变量名,=,左侧第一个”符号”之间不可含有空格

a="hello world"
b="$a"
c="$a $b"

echo $a
echo $b
echo $c

3.3、I/O重定向

默认情况下,程序会从标准输入读取数据,会将正常输出信息传递到标准输出,会将错误输出信息传递到标准错误输出。而默认的,标准输入,标准输出和标准错误输出都为终端。
I/O基本重定向描述见表1。

表1

I/O重定向符号 描述
< 标准输入重定向。“program < file”表示“program”的标准输入不再为终端,而是“file”文件
> 标准输出重定向。“program > file”表示“program”的标准输出不再为终端,而是“file”文件。如果“file”文件不存在,则新建该文件;如果存在,那么原有内容会被覆盖
>> 标准输出重定向,且为追加模式。“program >> file”表示“program”的标准输出不再为终端,而是“file”文件。如果“file”文件不存在,则新建该文件;如果存在,那么在原有内容基础上进行追加
| 一个程序的标准输出作为另外一个程序的标准输入。“program1 | program2”表示“program1”的标准输出作为“program2”的标准输入

3.4、对Shell编程很有用的两个文件:/dev/null和/dev/tty

程序将数据写入到“/dev/null”文件时,操作成功,实际什么事都没有发生;程序从“/dev/null”文件读取数据时,会立即得到文件结束符号。
程序从“/dev/tty”文件读取数据时,即表示从某个终端获取数据。

四、Shell脚本执行跟踪

在执行Shell脚本时,可通过“-x”选项开启Shell脚本执行跟踪功能。

五、国际化和本地化

用来设置使用的语言环境的功能称为“locale”,相应的有“locale”命令。与该功能相关的环境变量的说明见表2。

表2

名称 说明
LANG 未设置LC_xxx变量时所使用的默认值
LC_ALL 用来覆盖掉所有其他LC_xxx变量的值
LC_COLLATE 使用所指定locale的排序规则
LC_CTYPE 使用所指定locale的字符集
LC_MESSAGES 使用所指定locale的响应与信息
LC_MONETARY 使用所指定locale的货币格式
LC_NUMERIC 使用所指定locale的数字格式
LC_TIME 使用所指定locale的日期与时间格式

一般情况下,使用“LC_ALL”来强制设置单一的语言环境,而不使用“LC_xxx”变量。
其他相关可见locale命令。

你可能感兴趣的:(shell)