Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433971
  • 博文数量: 138
  • 博客积分: 4114
  • 博客等级: 上校
  • 技术积分: 1341
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-14 20:41
文章分类

全部博文(138)

文章存档

2014年(1)

2013年(2)

2012年(78)

2011年(13)

2010年(34)

2009年(10)

我的朋友

分类: LINUX

2010-03-12 10:44:41

一直在学习shell编程, 老是忘, 这次再学, 就把自己学的写下来, 以后就不用去四处找了,多温习温习, 相信一定会把shell编程学好的。
这是参考
写的
他写的很不错, 值得大家看看 
这是bshell下的编程
一  变数
bshell的变数型态只有字符串变数,因此要使用数值运算则必须靠外部命令达成目的。而其变数类型有以下几种。
1  使用者变数
   这是最常用使用的变数,我们可以在任何不包含空白字元的字符串来当做变数名称。设定时则用下列方式
var=string
取用的时在变数名称前加以"$"号
2. 系统变数(环境变数)
    和使用者变数相似,只不过此种变数会将其值传给其所执行的命令。要将一使用者变数设定为系统变数,只要加上
export  var
以下是一进入系统后就已设定好的系统变数:
$HOME  使用者自己的目录
$TZ    时区
$PATH  执行命令时所搜寻的目录
$MAILCHECK   每隔多少秒减产是否有新的邮件
$PS1   在命令列时的提示号
$PS2   当命令尚未打完时, shell要求输入时的提示号
$MANPATH   man指令的搜索路径
3. 唯读的使用者变数
   和使用者变数相似,只不过这些变数不能改变。要将使用者变数设成唯读的,只要加上
readonly  var
而若打上readonly则会列出所有唯读的变数。还有一点,系统变数不能设成唯读的。
4.  特殊变数
  有些变数一开始执行Script时就会设定,并且不能加以修改,当我们不叫它唯读的系统变数,而叫它特殊参数,因为这些变数是一执行程式时就有了,况且使用者将无法将一般的系统变数设定成唯读的。以下是一些特殊变数
$0   这个程式的名字
$n   这个程式的第n个参数值, n = 1, ... , 9
$*   这个程式的所有参数
$#   这个程式的参数个数
$$   这个程式的pid
$!   执行上一个背景指令的pid
$?   执行上一个指令的返回值

当你执行这个程式的参数数目超过9个时,我们可以使用shift命令参数往前移一格,如此即可使用第10个以后的参数,也可以使用set命令改变$n 及$*,方法如下:
set  string
值得一提的是, 当你想从键盘输入一变数数值时, 你可以使用下面的命令:
read  var1   var2....

二  执行命令
1. 直接下命令
  这个方式和命令列中直接下命令一样。
2. 使用sh命令
3. 使用 . 命令
  这时使用sh命令相似,只不过它不像sh一般会产生新的process, 相反地, 它会在原有的process下完成工作。
4 exec  命令
5 使用命令替换  ``

三  流程控制
 
  test命令, 当条件为真时则传回非零值,而条件为伪时则传回零。
1.  if  then 语法以及流程
if (condition)
then
then-commands
fi

2.  if then else
if (condition)
then
then-commands then-commands else-commands
else
else-commands
fi

3.  if then elif
 if (condition1)
 then
 commands1
 elif (condition2)
 then
 commands2
 else
 commands3
 fi

这里有一个例子

echo 'word  \c'
read word1
echo 'word \c'
read word2
echo 'word \c'
read word3
if ( test "$word1" = "$word2" -a "$word2" = "$word3")
then
echo 'Match: words 1, 2, & 3'
elif (test "$word1" = "word2")
then
ehco 'Match: words 1 & 2'
elif (test "$word1" = "word3")
then
echo 'Match: words 1 & 3'
elif (test "$word2" = '$word3')
then
echo 'Match: words 2 & 3'
else
echo 'No match'
fi

4  for  in
for var in arg-list
do
commands
done

ex:
   for a in xx  yy  zz
   do
   echo $a
   done
5. for
for var
do
commands
done

for a
do
echo $a
done

6. while

while (condition)
do
commands
done

ex:
 number = 0
 while(test $number -lt 10)
 do
 echo "$number \c"
 number = `expr $number + 1`
 done

7. until
until (condition)
do
commands
done

8. break, continue
9. case
case str in
part1)  command1;;
part2)  command2;;
part3)  command3;;
esac

echo 'Enter a, b, or c: \c'
read letter
case $letter_in
A|a) echo 'You enter A.';;
B|b) echo 'You enter B.';;
C|c) echo 'You enter C.';;
*)  echo 'Not A, B, or C';;
esac

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