分类: LINUX
2014-03-20 19:04:33
原文地址:Linux下shell脚本学习 作者:乐百事2
Shell概念:shell既是一种命令语言又是一种程序设计语言,它本身是一个用C语言编写的程序,作为用户使用Linux的桥梁
Shell了解:系统给出shell提示符,对普通用户用 $ 作提示符,对root用户用 # 做提示符,在提示符后输入命令名称及所需要的参数,shell将执行这些命令。
Shell特殊字符:
1、单引号
单引号将消除被括在其中的所有特殊字符的含义,即将特殊字符作为普通字符对待
2、双引号
可以替换输出为一个变量,一般和单引号搭配使用
例如: date='abc'
echo '$date' ——————$date
echo "$date" ——————abc
echo $date ——————abc
echo "'$date'" ——————'abc'
3、反斜线
反斜线防止shell误解特殊字符的含义,即屏蔽特殊字符的特殊含义
例如: date='abc'
echo \$date ————$date
echo $date ————abc
4、注释符
在shell编程里以字符 # 开头的正文行表示注释行
Shell程序变量和参数:
1、用户定义的变量
a、说明一个变量为只读
readonly +变量名
注解:如果程序中对一个只读变量进行赋值操作,则程序终止报错并不执行以下操作
b、定义公共变量
export +变量名 或 export +变量名=变量值
c、定义自己的变量
变量名=变量值 或 ${变量名=变量值}
注解:定义比变量时,等号两边一定不能有空格,两种方法定义的变量一样用法
d、清除变量
unset +变量名
注解:如果用echo打印被清除的变量,则打印空行
e、显示变量
echo命令结合$ 可以显示单个变量的取值
注解:要用一个echo命令打印多个变量则每个变量前都要加$ 符号
f、显示所有本地定义的shell变量
set命令
注解:用set命令显示所有本地定义的shell变量包括环境变量等
2、shell定义的环境变量
Shell在开始执行时就已经定义了一些和系统工作环境有关的变量,这些变量用户还可以重新定义(最好不要),传统上所有环境变量均为大写。
a、设置环境变量
VARNAME=变量值;export VARNAME 或 export VARNAME=变量值
b、显示所有环境变量
env命令可以查看所有的环境变量
注解:环境变量的其他操作和用户定义变量操作一样,例如清除unset显示echo等
3、常用的shell环境变量
HOME:保存注册目录的完整路径名
PWD:当前工作目录的绝对路径名
SHELL:保存默认shell类型
TERM:保存终端类型
LOGNAME:保存登录名
PATH:保存用冒号分隔的多个目录路径名,shell将按其路径顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行
4、预定义变量
预定义变量和环境变量相似,都是在shell开始时就定义了的变量,不同的是用户只能根据shell的定义来使用这些变量,而不能重新定义,所有预定义变量都是由$符和另一个符号组成的,常用的预定义变量如下:
$# :位置参数的变量
$* :所有位置参数的内容
$? :命令执行后返回的状态
$$ :当前进程的进程号
$ ! :后台运行的最后一个进程号
$0 :当前执行的进程名,不是一个位置参数
5、位置参数
位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数,位置参数之间用空格分隔。Shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依此类推,$9以后的位置参数要加大括号,如${10},${11}...
例如:在某脚本中执行sh shell_test 5 4 3 2 1,则在shell_test脚本中有5个位置参数,可以echo $2对应打印4,如同C语言中函数间传递参数
Shell程序的执行方法:
Shell编程的惯例,以bash为例,程序第一行一般为“#! /bin/bash”,其中“#”表示该行是注释,“!”表示shell(脚本)运行后面的命令“/bin/bash”并用文档的其余部分作为输入,也就是运行/bin/bash,并让/bin/bash去执行shell程序的内容。
注解:对于shell程序,当编辑器生成一个文件时,系统赋予的许可权都是644(rw-r-r--),可以直接运行这个shell脚本
1、sh (shell程序文件名)或 bash(shell程序文件名)
注解:调用一个新的bash命令解释程序,并把当前shell程序文件名作为参数传递给它
2、sh<(shell程序文件名)或 bash<(shell程序文件名)
注解:这种方式是利用输入重定向,使shell命令解释程序的输入取自指定的程序文件
3、bash -选择项(shell程序文件名)
-e :如果一个命令失败就立即退出
-n :读入命令但不执行
-u :置换时把未设置的变量看作出错
-v :当读入shell输入行时把它们显示出来
-x :执行命令时把命令和它们的参数显示出来
注解:可以通过“set -选择项”和“set +选择项”在shell程序内部启用和禁用“对应选择项”的作用,如果只想对程序的某一段使用这些选择项时,则用“set -选择项”和“set +选择项”将对应段代码包围起来
Shell程序的流程语句:
与传统语言不同的是,shell用于指定条件值的不是布尔运算式,而是命令和字串
1、测试命令:
用于检查某个条件是否成立,它可以进行数值、字符、文件 三个方面的判断。
a、数值判断:
-eq :等于则为真
-ne :不等于则为真
-gt :大于则为真
-ge :大于等于则为真
-lt :小于则为真
-le :小于等于则为真
b、字串判断:
= :相同则为真
!= :不相同则为真
-z 字串 :字串长度伪则为真
-n 字串 :字串长度不伪则为真
c、文件判断:
-e 文件名:文件存在则为真
-r 文件名:文件存在且可读则为真
-w 文件名:文件存在且可写则为真
-x 文件名:文件存在且可执行则为真
-s 文件名:如果文件存在且至少有一个字符则为真
-d 文件名:如果文件存在且为目录则为真
-f 文件名:如果文件存在且为普通文件则为真
-c 文件名:如果文件存在且为字符型特殊文件则为真
-b 文件名:如果文件存在且为块特殊文件则为真
d、测试逻辑操作符
-a :逻辑与,类似C中的&&
-o :逻辑或,类似C中的||
! :逻辑非 (优先级!最高,-a次之,-o最低)