1 shell简介入门bash编程之执行
在Bourne Shell中有五种方式执行一个命令,而这五利方式所产生的结果有所不同:
::直接下命令:这个方式和在命令行中用命令的效果一样。
::使用sh命令sh command:这时的文件必须是Bourne Shell的脚本,但这个文件并不一定要设成
可执行。除此之外和直接用命令的方式一样。
::使用"."命令command:这时和使用sh命令相似,只不过它不像sh一般会产生新的process,相反
地,它会在原有的process下完成工作。
::使用exec命令exec command:此时这个脚本将会被所执行的命令所取代。当这个命令执行完毕
之后,这个脚本也会随之结束。
::使用命令替换:这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参
数时,就一定要使用这个方法。我们将命令行放在两个"`"符号。
例如:
str=`Current directory is ``pwd`
echo $str
结果如下:
Current directory is /home/dfbb
这个意思是pwd这个命令输出"/users/cc/mgtsai",然后整个字符串代替原来的pwd设定str变量,
所以str变量的内容则会有pwd命令的输出。
shell简介入门之bash编程之流程控制(1)
在介绍流程控制之前我们先来看看twst命令。test命令的参数是条件判式,当为真时则传回非零
值,而条件为假时则传回零。在所有的流程控制都必须用到test命令来判断真假。另外一种方法
是使用中括号[],一般都是用中括号居多。测试的种类有:
A::字符串测试
string1 = string 2 两字符串是否相等
string1 != string2 两字符串是否不等
string 字符串是否是空的
-z string 字符串长度是否为0
-n string 字符串长度是否非0
B::整数测试
-eq 等于
-ne 不等
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
C::文件测试
-b 区块文件
-c 字符文件
-d 目录
-f 一般文件
-r 可读
-w 可写
-x 可执行
-k 设定了限定位
-g 设定了组位
-u 设定了use id
-p 管线
-s 文件大小非0
以下介绍各种流程控制
A::
if then
语法如下:
if (condition)
then
then-commands
fi
condition是一个test命令。往的一所介绍的各种流程中的conditon都是test命令。
例如:
test4.sh
--------------------------------------------------
#!/bin/bash
if(test $# !=0)
then
echo Arg1:$1
fi
--------------------------------------------------
$/test4.sh hello
Arg1:hello
$./test4.sh
$
B::
if then else
语法如下:
if(confition)
then
then-commands
else
else-commands
fi
C::
if then elif
语法如下:
if (conditon1)
then
commands1
elif(condition2)
then
commands2
else
commands3
fi
例如:
test5.sh
-------------------------------------------------------------
#!/bin/bash
echo `word 1:`
read word1
echo `word 2:`
read word2
echo `word 3:`
read word3
if(test "$word1" = "$word2" -a "$word2" = "$word3")
then
echo `match:words 1,2 & 3`
elif(test "$word1" = "$word2")
then
echo `match:word 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 `
------------------------------------------------------
$./test5.sh
word 1:
do
word 2:
do
word 3:
do
match:words 1,2&3
D::
for in
语法如下:
for var in arg-list
do
commands
done
例如:
test6.sh
--------------------------------------------------
#!/bin/bash
for a in xx yy zz
do
echo $a
done
---------------------------------------------------
结果如下:
xx
yy
zz
E::
语法如下
for var
do
commands
done
例如
test7.sh
-------------------------------
#!/bin/bash
for a
do
echo $a
done
-----------------------
$./test7.sh xx yy zz
xx
yy
zz
F::
while
语法如下:
while(condition)
do
commands
done
例如:
#!/bin/bash
number=0
while(test $number -lt 10)
do
echo "$number\c"
number=`expr $number+1`
done
echo
-----------------------------------------
结果如下:
0123456789
G::
until
语法如下:
until(condition)
do
commands
done
它和while的不同只在于while是在条件为真时执行循环,而until是在条件为假时执行循环。
H::
break及continue
这两者是用于for,while,until等循环控制下的。break会跳到done后才执行,而continue会跳至
done后才执行,而continue会跳至done执行,继续执行循环。
I::
case
语法如下:
case str in
pat1) commands1;;
pat2) commands2;;
pat3) commands3;;
esac
而pat除了可以指定一些确定的字符串,也可以指定字符串的集合,如下:
* 任意字符串
? 任意字符
[abc] a,b,c三字符其中之一
[a-n] 从a到n的任一字符
│ 多重选择
例如:
test8.sh
-----------------------------------------------------------
#!/bin/bash
echo `enter A,B,C:"
read letter
case $letter in
A│a) echo `you entered A.`;;
B│b) echo `you entered B.;;
C│c) echo `you entered C,;;
*) echo `not a,b,c`;;
esac
----------------------------------------------------------------------
J::
函数
格式如下:
function-name()
{
commands
}
没有评论:
发表评论