📄 unix的批处理 shell script.htm
字号:
<pre> C Shell 有些特性和Bourne Shell一样,但有些不相同。这里介绍与Bourne Shell
不相同的地方。
</pre>
<pre>一、变数</pre>
<pre> 1. 字串变数
这个部分和Bourne Shell的变数一样,只不过在设定变数值时不能使用Bourne
Shell的方式,而必须打:</pre>
<pre> set var=value</pre>
<pre> 2. 数字运算
基本上C Shell 没有数字变数,但C Shell 却有简单的方法处理数字运算:</pre>
<pre> @ var operator expression</pre>
<pre> operator可以是C 语言中的=, +=, -=,......,而expression则是运算式。运
算式的运算子如下:</pre>
<pre> A. () 改变计算的顺序
~@
B. ~ 位元NOT运算
@~~
! 逻辑否定
C. % 取馀数</pre>
<pre> C. % 取馀数
/ 除
* 乘
- 减
+ 加
D. >> 右移
<< 左移
E. > 大於
< 小於
>= 大於等於
<= 小於等於
!= 不等於
== 等於
F. & 位元AND运算
^ 位元XOR运算
| 位元OR 运算
G. && 逻辑AND
|| 逻辑OR</pre>
<pre> 除此之外,我们也可以检验一个档案的状态,如下</pre>
<pre> -n filename
</pre>
<pre> 而-n可为下列之一</pre>
<pre> -d 档案是一个目录档案
-e 档案存在
-f 档案为一般的档案
-o 使用者拥有这个档案
-r 使用者可以读取这个档案
-w 使用者可以写入这个档案
-x 使用者可以执行这个档案
-z 档案长度为0</pre>
<pre> <eg>
@ count = count + 1
@ flag = -e /users/cc/mgtsai/mail && -e /usr/spool/mail</pre>
<pre> 3. 阵列
在C Shell 中,我们可以宣告阵列变数,方式如下</pre>
<pre> set var=(val1 val2 ......)</pre>
<pre> 而var[1]之值为val1,var[2]之值为val2......。而$var代表整个阵列。我们
可以用$#var 来计算阵列个数,也可以用$?var 来检查某个变数是否已宣告。
</pre>
<pre> 4. 特殊变数
$argv 和Bourne Shell的$*相似,只不过这是一个阵列。
$argv[n] 和Bourne Shell的$n相同,但不受个数限制。
$#argv 和Bourne Shell的$#相同
$home 和Bourne Shell的$HOME相同
$path 和Bourne Shell的$PATH相似,只不过这是一个阵列
$prompt 和Bourne Shell的$PS1相同
$shell Shell的路径名称
$status 和Bourne Shell的$?相同
$$ 和Bourne Shell的$$相同
$< 键盘输入
</pre>
<pre>二、执行命令</pre>
<pre> 基本上和Bourne Shell相同,只有一点在Bourne Shell中的"." 命令在C Shell 中
则为"source"命令。
</pre>
<pre>三、流程控制
</pre>
<pre> 在C Shell 中流程控制不像Bourne Shell中一般需要使用test命令。相反地,它和
C 语言类似只要在条件中写出运□式即可。当运算结果不为零时,其值为真,为零
时其值为伪。以下是C Shell的流程控制
1. if
语法如下</pre>
<pre> if (expression) simple-command</pre>
<pre> 2. goto
语法如下</pre>
<pre> goto label</pre>
<pre> 这时程式会跳至以l"label:"开头的那一行执行</pre>
<pre> <eg>
if ($#argv == 2) goto goodargs
echo 'Please use two arguments.'
exit
goodrags:
...
</pre>
<pre> 3. if then else
这和Bourne Shell的if then, if then else, if then elif 相似。语法如下</pre>
<pre> A. if (expression) then
commands
endif</pre>
<pre> B. if (expression) then
commands
else
commands
endif</pre>
<pre> C. if (expression) then
commands
else if (expression) then
commands
else
commands
endif
</pre>
<pre> 4. foreach
这和Bourne Shell的for in相似。语法如下</pre>
<pre> foreach var (arg-list)
commands
end</pre>
<pre> 5. while
这和Bourne Shell的while相似。语法如下</pre>
<pre> while (expression)
commands
end</pre>
<pre> 6. break及continue
这和Bourne Shell的break 及continue相似,是用来中断foreach 及while 回
圈。</pre>
<pre> 7. switch
这和Bourne Shell的case相似。语法如下</pre>
<pre> switch (string)
case pat1:
commands1
breaksw
case pat2:
commands2
breaksw
case pat3:
commands3
breaksw
endsw
</pre>
<pre>□附录A expr命令
</pre>
<pre>命令格式</pre>
<pre> expr expression</pre>
<pre>叙述</pre>
<pre> expression是由字串以及运算子所组成,每个字串或是运算子之间必须用空白隔开
。下表是运算子的种类及功能,而优先顺序则以先後次序排列,我们可以利用小括
号来改变运算的优先次序。其运算结果则输出至标准输出上。</pre>
<pre> : 字串比较。比较的方式是以两字串的第一个字母开始,而以第二个字串的
字母结束。如果相同时,则输出第二个字串的字母个数,如果不同时则传
回0 。
* 乘法
/ 除法
% 取馀数
+ 加法
- 减法
< 小於
<= 小於等於
= 等於
!= 不等於
>= 大於等於
> 大於
& AND运算
| OR运算</pre>
<pre> 当expression中含有"*", "(", ")" 等符号时,必须在其前面加上"\" ,以免被
Shell 解释成其它意义。
</pre>
<pre> <eg> expr 2 \* \( 3 + 4 \) 其输出为14
</pre>
<pre>□附录B test命令
</pre>
<pre>命令格式</pre>
<pre> test expression</pre>
<pre>叙述</pre>
<pre> expression中包含一个以上的判断准则以作为test评诂的标准。两准则间用"-a"代
表逻辑AND 运算,"-o"代表逻辑OR运算,而在准则前放置一"!" 代表NOT 运算。如
果没有括号,则优先权则为"!" > "-a" > "-o" 。和expr命令相同,相使用左右括
号时,必须在其前面加上"\" 。以下是有关准则的叙述(合叙述时传回真,否则传
回伪):</pre>
<pre> string string不为空白字串
-n string string的长度大於0
-z string string的长度等於0
string1=string2 string1等於string2
string1!=string2 string1不等於string2
int1 -gt int2 int1大於int2
int1 -ge int2 int1大於等於int2
int1 -eq int2 int1等於int2
int1 -ne int2 int1不等於int2
int1 -le int2 int1小於等於int2
int1 -lt int2 int1小於int2
-r filename 档案可读取
-w filename 档案可写入
-x filename 档案可执行
-f filename 档案为一般档
-d filename 档案为目录
-s filename 档案为非空的一般档</pre>
<pre> <eg> test -r "$filename" -a -s "$filename"</pre>
<p> </p>
<pre><strong><big> <a href="../hkbx!.htm">返回“新客补习”</a></big></strong></pre>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -