您的位置:首页 > 运维架构 > Shell

Shell脚本学习之基础程序结构

2015-07-16 22:10 736 查看
Shell脚本:一个由一堆命令堆砌而成的,用来完成特定任务的,可以被指定解释器执行的,文本文件。

这个是我对Shell脚本的理解。

1、Shell脚本就是一个可执行文本文件,它不需要编译,不需要连接,写完就可以直接执行;

2、Shell脚本的主体是一堆命令,每一条语句都可以再控制台下直接执行;

3、指定解释器,这个就是每个Shell脚本的第一句话,是固定的,解释器有多个,Bash、CShell等等,所以需要指定下。

程序=最简单的结构+语句+实现的思想。

最简单的结构就相当于人的骨架,就是最简单的一个程序,可以堪称所有程序的祖宗的就是它。

语句就相当于人的血肉,用来填充这个骨架。在我看来就四种:输入、输出、循环、判断。

实现思想就相当于人的灵魂,需要实现的功能都在此体现。

最简单的结构,那就是最简单的程序

#!/bin/bash
exit 0


这个Shell什么也没有做,就退出了,但它确实是最简单的Shell脚本,他是符合语法规则的。

第一行指定了这个脚本是由bash来解释执行的。

第二行退出当前脚本。

Shell的执行有两种方式:

一个是./脚本名.sh 的方式执行,这种执行方式是新开一个bash来执行该脚本,类似与子进程的方式执行,所以脚本中的任何变量在脚本退出后都会被销毁,不会在父进程中留下任何痕迹。

一个是source 脚本名.sh方式执行,这种方式,不再开子进程执行,脚本中的所有变量都会影响到当前的bash,即脚本执行完成后,在当前命令行可以查看脚本中的变量(如果脚本没有取消(unset)变量的话)

语句

输入:

Shell脚本的输入和C语言的输入一样,一个是从外部读取的,一个是命令本身的。

从外部读取的,就是用read命令从用户的输入读取的数据,与C语言的scanf类似。

#!/bin/bash
read -p "please enter a number:" iInputNum
exit 0


这个程序就是提示用户输入一个数字,然后读取用户的输入。

这里有输入,自然要存储,所以要定义变量来存储。Shell脚本的变量定义算是我见过的最随意的了。没有类型,随时定义,随时使用。

随便写个字符串,他就是一个变量,可以是一个数字,可以是一个字符串,也可以是一个命令的执行结果,都行。

命令本身的输入,就是指在执行的命令后面带参数,类似与C语言的 int argc和char *argv。Shell脚本提供同样的功能,这个是Shell脚本的默认变量

$0:代表命令本身

$1:代表命令后的第一个参数

$2:代表命令后的第二个参数

依次类推。

$#:代表参数的个数,不包括命令本身。

$@:表示输出所有的参数,不包括命令本身。

输出

输出也不需要控制输出格式什么的,只有一个命令:echo。

#!/bin/bash
echo "Hello world"
exit 0


这个程序输出一个最经典的一句话:“Hello world”。

这个是输出字符串,如果要输出变量,可以用下面的方式

echo $VarName


以美元符号($)加变量名的方式输出一个变量。

循环

循环分为三种:while循环、until循环、for循环

while循环格式:

while [判断式]

do

#程序段

done

当满足判断式的时候,就进入循环,循环的主体就是中间的程序段,以do开始,以done结束。

until循环格式:

until [判断式]

do

#程序段

done

如果判断式成立,则停止循环。其余与while循环类似。

for循环

for循环共有三种格式

1、适用于有限个,无规则的循环值

for 变量名 in 枚举值1 枚举值2 枚举值3

do

#程序段

done

1、变量名,不需要加美元符

2、可以枚举多个值,也可以式一个枚举值包含多个数据,如“ls ”罗列出来的文件名,保存在同一个变量中,然后循环遍历,此时只要写一个变量名即可

2、适用于依次增加,且每次增加值为1的情况

for 变量名 in $(seq 起始值 终止值)

do

#程序段

done

seq是sequence的缩写,有连续之意,所以程序会从起始值开始逐次加一

3、适用于有一定增加规律,每次增加的值相同,但是不等于一的情况

for ((初始值; 限制值; 执行步长))

do

#程序段

done

从初始值开始每次增加步长,直至限制值

判断

判断实际上常用的只有一个if,但是有多种写法

1、单个分支

if [条件判断]; then

#处理

fi

2、两个分支

if [条件判断]; then

#处理

else

#处理

fi

3、多个分支

if [条件判断]; then

#处理

elif [条件判断]; then

#处理

else

#处理

fi

到此为止,Shell脚本的基本结构已经都知道了,理论上已经可以写出任何的Shell脚本了!

骨架、血肉都已经齐活了,接下来只需要将对问题的解决方法用这些语句表达出来就行了。

一开始就说过,Shell脚本就是一堆命令的堆砌,在知晓语法逻辑结构后,接下来就是看个人的命令使用的熟练程度了,这就要看个人修炼了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本 linux