Shell程序的基本结构
#!/bin/bash
#hello
echo 'hello Linux'
echo 'this is a shell file'
这个程序很简单,但包含了shell程序的下面一些基本特征:
(1)所有的shell程序第一行都是以#!开头。后面为执行此shell程序的shell解释器且与名称。
(2)程序的第二行以注释的方式写出程序的名字,这是shell编程的一种习惯。
(3)最简单的shell程序就是一组shell命令。这里只是使用了两个echo命令显示了两个字符串。
shell的编辑、保存与执行
我们可以使用gedit,vim等任意一个文本编辑器来编写shell脚本。
shell程序是一个普通的文本,需要添加可执行权限以后才能执行。编辑保存后,需要执行一个命令,使得shell脚本变为可执行文件。命令为:chmod -x filename
这时,shell脚本文件才变为一个可执行文件。只要在该脚本所在文件目录,输入./filename即可执行该脚本。
shell程序中的变量
shell程序中需要用变量来存储程序的数据。shell中的变量分为 局部变量、环境变量、位置变量三种。
1、局部变量
shell语言是解释型语言,不需要像C或java语言一样编程时需要事先声明变量。在shell中,对一个变量进行赋值时,就定义了变量。局部变量指的是只在当前的进程和程序中有效的变量。
shell程序的变量是无数据类型的,可以使用同一个变量存放不同数据类型的值。变量赋值之后只需在变量前面加一个$访问变量的值。可以用赋值符号(=)为变量赋值。如果对一个变量赋值是没有空格的字符串,那么可以不用引号。
2、环境变量
环境变量是在一个用户的所有进程中都可以访问的变量。系统中常常使用环境变量来存储常用的信息。
环境变量的查看: 使用export命令可以查看系统的环境变量的列表。
环境变量的访问: 环境变量的访问,需要在一个环境变量的前面加一个$符号。
环境变量的定义: 可以用export命令来定义一个环境变量。环境变量的命令一般都是大写的。
环境变量的删除: 删除自己定义的环境变量,可以用unset命令。
3、位置变量
位置变量是指的shell程序在运行时传入的参数。程序中可以用变量的形式来调用这些参数。这些参数被存放到1~9的9个变量名中,被形象的称为位置变量。同普通变量一样,位置变量用$前缀加这个数字来表示。
在位置变量中,$0的值为bash。$1以后的变量是输入参数的列表。
shell程序中变量的赋值
shell中使用'='进行变量的赋值,也可以用等号来改变或初值化一个变量的值。要给一个变量赋值时,就这么写:变量名=数值。要去用变量的值时,只需在变量名前加一个$符号。
!!!注意:给变量赋值时,不能在“=”两边留空格。
算数运算符
shell中常用的算术运算符为:+、-、*、/、**、%、+=、-=、*=、/=、%=。其中**为对两个变量做幂运算。
注:当输入以下命令时:echo 1+2。 shell中并没有输出计算结果3,而是输出了1+2。要进行数值计算,在shell中有三种表达方式:
(1)、用expr改变运算顺序。expr用于整数值计算。可以用echo `expr 1 + 2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。(注意:`不是单引号,而是“TAB“键上面的那个符号。
(2)、用let指示数学运算。可以先将运算的结果赋值给变量b,命令是 let b=1+2,然后再用 echo $b来输出b的值。
(3)、用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容先进行数学运算。
输入和输出
echo命令可以输出文本或变量的值,是shell中最常用的输出方式。结果可以输出到终端也可以写入到文件。
echo $str #将结果输出到终端
echo $str>file #将结果保存到文件file中。如果没有,则新建一个文件
#如果有了则会覆盖原来的文件
echo $str>>file #将结果追加到文件file中
echo的格式控制字符:/c,/t,/n
注意:如果是要输出特殊字符,必须加-e选项,否则输出的结果中会直接输出字符。加-n选项可以禁止echo输出后的换行。
read命令读取信息
read命令可以从键盘或文件中读入信息,并赋给一个变量。read命令读取信息的各种方法:
(1)、如果只读入一个变量,会把键盘上输入的所有信息赋给这个变量。按“Enter“键结束输入。
(2)、如果输入多个变量,用空格键将输入的变量隔开。如果输入变量的个数多于需要读取变量的个数,将会把剩余的变量赋值给最后一个变量。
(3)、在读取语句后面添加<filename,表示从文件中读取数据,并且赋值给变量。
测试语句
注:$?用于保存上一个命令的结果
test命令的测试结果,返回0时表示测试成功,返回1时表示测试失败。
用中括号可以代替test命令。这种方法和test命令的原理相同。需要注意的是:中括号里面的前后都要有一个空格。如: [ a -eq b ] 才是标准的写法。
测试有文件状态测试,数值测试,字符串测试,逻辑测试。每一个测试对应的测试参数都不一样。
流程控制结构
if语句
每一个if都要有一个fi与之相匹配。
if ....; then
....
elif ....; then
....
else
....
fi
这些都只是shell编程最简单的应用与实现,要想进步,还得再往深处研究,主要是多加练习编写shell脚本程序。熟能生巧。