Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1365136
  • 博文数量: 416
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 4258
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-23 22:13
文章分类

全部博文(416)

文章存档

2015年(7)

2014年(42)

2013年(35)

2012年(14)

2011年(17)

2010年(10)

2009年(18)

2008年(127)

2007年(72)

2006年(23)

2005年(51)

分类: 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程序文件名)或 bashshell程序文件名)

注解:调用一个新的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最低)

阅读(551) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~