Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2253515
  • 博文数量: 318
  • 博客积分: 8752
  • 博客等级: 中将
  • 技术积分: 4944
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-23 07:56
文章分类

全部博文(318)

文章存档

2019年(1)

2017年(2)

2016年(12)

2015年(2)

2014年(1)

2013年(17)

2012年(22)

2011年(9)

2010年(37)

2009年(33)

2008年(44)

2007年(43)

2006年(95)

分类: LINUX

2006-06-16 10:46:52

 

一、用户登陆进入系统后的系统环境变量

$HOME 使用者自己的目录

$PATH 执行命令时所搜寻的目录

$TZ 时区

$MAILCHECK 每隔多少秒检查是否有新的信件

$PS1 在命令列时的提示号

$PS2 当命令尚未打完时,Shell 要求再输入时的提示号

$MANPATH man 指令的搜寻路径

二、特殊变量

$0 这个程序的执行名字

$n 这个程序的第n个参数值,n=1..9

$* 这个程序的所有参数

$# 这个程序的参数个数

$$ 这个程序的PID

$! 执行上一个指令的PID

$? 执行上一个指令的返回值

三、shell中的变元

* 任意字符串

? 一个任意字符

[abc] a, b, c三者中之一

[a-n] 从a到n的任一字符

四、几个特殊字符表示

\b 退回

\c 打印一行时没有换行符 这个我们经常会用到

\f 换页

\r 回车

\t 制表

\v 垂直制表

\\ 反斜线本身

五、判断文件的属性

格式:-操作符 filename

-e 文件存在返回1, 否则返回0

-r 文件可读返回1,否则返回0

-w 文件可写返回1,否则返回0

-x 文件可执行返回1,否则返回0

-o 文件属于用户本人返回1, 否则返回0

-z 文件长度为0返回1, 否则返回0.

-f 文件为普通文件返回1, 否则返回0

-d 文件为目录文件时返回1, 否则返回0

六、测试字符串

字符串1 = 字符串2 当两个字串相等时为真

字符串1 != 字符串2 当两个字串不等时为真

-n 字符串    当字符串的长度大于0时为真

-z 字符串  当字符串的长度为0时为真

字符串 当串字符串为非空时为真

七、测试两个整数关系

数字1 -eq 数字2 两数相等为真

数字1 -ne 数字2 两数不等为真

数字1 -gt 数字2 数字1大于数字2为真

数字1 -ge 数字2   数字1大于等于数字2为真

数字1 -lt 数字2 数字1小于数字2为真

数字1 -le 数字2 数字1小于等于数字2为真

八、逻辑测试

-a     与

-o  或

!非

shell中的特殊字符有

1、$ 美元符

2、\ 反斜杠

3、` 反引号

4、" 双引号

5、< ,>,*,?,[,]

下面我一一举列说明

一、$符号

1、echo $? 显示的是上一条指令退出状态

2、echo "$?" 效果同上

3、echo '$?' 显示的是$?

4、echo \$? 显示的是$?

5、echo "\$?" 显示的是$?

大家可能已经看出 $符号在双引号中具有特殊意义 双引号对$符号不起作用而单引号可以将特殊字符的的特殊意义屏蔽掉,使其能显示为字符本身,反斜杠也可以将特殊字符的特殊含义屏蔽掉,使特殊字符失去特殊含义。

二、\ 反斜杠

反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符

A=1234

echo \$A 显示为$A 如果不加\将显示为1234

echo \` 显示为`

echo \" 显示为双引号

echo \\ 显示为\

三、` 反引号

反引号的功能是命令替换,将反引号中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量

A=`date`

echo $A 显示的不是date而是当时的时间串

比如有一文件A的内容如下 

ABCDEFG

1234456

abcdefg

B=`cat A|grep 234`? # 检索文件A中含有字符串234的行

echo $B 将显示为1234456

echo "$B" 将显示为什么?

echo "\$B" 将显示为什么?读者自己试试

四、" 双引号

在系统中有些特殊字符,为避免引用这些特殊字符 往往用双引号或单引号将这些特殊字符引起来,使其不具有特殊含义。

但有一部分特殊字符在引号中还是具有特殊含义,用双引号引起来是不起作用的。本文中所列的前四个特殊字符在双引号中还是特殊字符。为了使其不具有特殊含义一是用单引号引进来二是用\反斜线使其失去作用。

比如我们想原样输出这些特殊字符

echo """

echo "$"

echo "\"

echo "`"

以上不是你所期望的结果,因为双引号对它们不起作用,你只能这样才能输出这些特殊字符的原形

echo '"'

echo '$'

echo '\'

echo '`'



echo "\""

echo "\$"

echo "\\"

echo "\`"

将分别显示为 " $ \ `

五、其它特殊字符

大家注意到,除了前四个特殊字符外,我将其它的特殊字符都放在一块,这是因为前四个特殊字符在双引号中还是具有特殊含义,所以单独拿出来讲,除此以外的特殊字符如果你要输出这些特殊字符的原形,你就可以用双引号或单引号引起来使其失去特殊含义。

< ,>,*,?,[,]对shell有特殊含义 但你可以用双引号引起来输入这些原形

一、if 条件语句 

格式:

if 条件表达式

then #当条件为真时执行以下语句

命令列表

else #为假时执行以下语句

命令列表

fi

if 语句也可以嵌套使用

if 条件表达式1

then

if 条件表达式2

then

命令列表

else

if 条件表达式3

then

命令列表

else

命令列表

fi

fi

else

命令列表

fi

你可以进行多层嵌套 一个if语句一定要跟一个fi 表示该层条件结束否则会造成语法错误结合前面讲的 举例如下:

这里先讲一个条件语句中用到的命令test 表示测试test后面的条件是否为真

if test -f "$1"

then

lpr $1

else

if test -d "$1"

then

cd $1

lpr $1

else

echo "$1不是文件或目录"

fi

fi

以上的例子还可以改成如下所示

if test -f "$1"

then

lpr $1

elif test -d "$1" #elif 同else if

then

(cd $1;lpr $1)

else

echo "$1不是文件或目录"

fi??????

以上的例子不知您是否看懂是什么意思吗?

假如我们现在将这个例子保存为prfile

chmod +x prfile

执行刚才的程序

./prfile aaa

这个例子是检查你的输入的参数是否是一个文件 如果是就打印 如果是一个目录 先转目录再打印 如果即不是文件也不是目录给出提示

二、多重条件测试语句case

格式:

case 字串 in

模式) 命令列表;;

模式) 命令列表;;

....

esac

多重条件语句是以case 开始以esac结束 中间可以有多个条件列表 功能是测试字串和和里面的模式有没有匹配的,有就执行里面的命令列表 模式也可以是*号 表示任意字串,每个模式里面的最后要心;;双引号结束,否则会发生语法错误。

现举例如下:

case $1 in

*.c)

cc $1

;;

*.txt)

lpr $1

;;

*)

echo "未知的类型"

esac

假如将以上内容保存在文件abc中

chmod +x abc

执行 ./abc a.c   将会对文件a.c进行编译

执行 ./abc readme.txt 将会把文件通过打印机

假如我将以上内容改一下,你是否会知道它的执行结果?

case $1 in

*)

cc $1

;;

*.txt)

lpr $1

;;

*.c)

echo "未知的类型"

esac

阅读(752) | 评论(0) | 转发(0) |
0

上一篇:System.map文件的作用

下一篇:Shell技巧汇总

给主人留下些什么吧!~~