shell编程包含哪些结构(shell编程脚本中)

$0 这个程式的执行名字

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

$* 这个程式的所有参数,此选项参数可超过9个。

$# 这个程式的参数个数

$$ 这个程式的PID(脚本运行的当前进程ID号)

$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)

$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

$- 显示shell使用的当前选项,与set命令功能相同

$@ 跟$*类似,但是可以当作数组用

举例说明:

以下示例显示了此简单操作的运行情况:

$ ls -l

total 33

drwxr-xr-w 2 root root 1024 Dec 5 05:05 LST

-rw-rw-rw- 1 emmett users 27360 Feb 6 07:30 evan

-rwsrwsrwx 1 root root 152 Feb 6 07:32 hannah

drwxr-xr-x 2 emmett users 1024 Feb 6 07:31 karen

-rw------- 1 emmett users 152 Feb 6 07:29 kristin

-rw-r--r-- 1 emmett users 152 Feb 6 07:29 spencer

$

$ test -r evan

$ echo $?

0

$ test -r walter

$ echo $?

1

$

由于第一次评估为真 — 文件存在且可读 — 返回值为真,或 0。由于第二次评估的文件不存在,该值为假,返回值不为零。将值指定为零或非零很重要,因为在失败时不会始终返回 1(虽然这是通常返回的值),可能返回一个非零值。

正如开头所提到的,除了使用 test 外,您还可以用方括号 [ ] 将命令括住来向 shell 发出同样的命令 — 如下所示:

$ [ -w evan ]

$ echo $?

0

$ [ -x evan ]

$ echo $?

1

$

同样,第一个表达式为真,第二个表达式为假 — 正如返回值所指示的那样。您还可以使用以下命令将两个文件彼此进行比较:

file1 -ef file2 测试以判断两个文件是否与同一个设备相连,是否拥有相同的 inode 编号

file1 -nt file2 测试以判断第一个文件是否比第二个文件更新(由修改日期决定)

file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧


if [ -z "$DIRNAME" ]这里的-z是什么意思啊?

if [ -d /userdata ] 这个-d呢?

类似这样的文件操作在shell编程中用处很大:我总结有一些一些经常使用

-d :判断制定的是否为目录

-z:判断制定的变量是否存在值

-f:判断制定的是否为文件

-L:判断制定的是否为符号链接

-r:判断制定的是否可读

-s:判断存在的对象长度是否为0

-w:判断制定的是否可写

-x:判断存在的对象是否可以执行

!:测试条件的否定符号

这些文件操作很多时候给脚本编程带来方便,尤其是用在if条件语句中

shell编程包含哪些结构(shell编程脚本中)(1)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页