Linux之Shellfor循环
Linux之Shellfor循环
@代表所有参数
所以如果后⾯跟上echo $v你会发现他会⼀次显⽰user userdebug eng
$poo -le ${#prodlist[@]} 这句话是说 $poo⼩于等于prodlist中的所有的值是这个意思吗?
1、Shell for循环语法
for 变量 in 列表
do
command1
command2
...
commandN
done
**也可以写成:for var in list; do
- 13.1.1、读取列表中的值
#!/bin/bash
#basic for command
for test in Alabama BOb Tom Console
do
echo The next state is $test
done
执⾏结果:
The next state is Alabama
The next state is BOb
The next state is Tom
The next state is Console
在最后⼀次迭代后,$test变量的值会在shell脚本的剩余部分保持有效。它会⼀直保持最后⼀次迭代的值(除⾮你修改了它)。
- 13.1.2、读取列表中的复杂值
有两种解决办法: *使⽤转义字符(反斜线)来将单引号转移;
*使⽤双引号来定义⽤到单引号的值。
#!/bin/bash
#basic for command
for test in I don\'t think if "this'll" work
do
echo The next state is $test
done
执⾏结果:
The next state is I
The next state is don't
The next state is think
The next state is if
The next state is this'll
The next state is work
*记住,for命令⽤空格来划分列表中的每个值。如果在单独的数据值中有空格,就必须⽤双引号将这些值圈起来。
-
13.1.3、从变量读取列表
将⼀系列的值都集中存储在⼀个变量中,然后需要遍历变量中的整个列表。
#!/bin/bash
#using a variable to hold the listlist="Alabama BOb Tom Console"
#向已有列表中添加或拼接⼀个值
list=$list" success"
for state in $list
do
echo "this word is $state"
done
执⾏结果:
this word is Alabama
this word is BOb
this word is Tom
this word is Console
this word is success
-
13.1.4、从命令读取值
有两种⽅式可以将命令输出赋值给变量:
(1)反引号字符(`)
(2)$()格式
例如:
test=`date`
test=$(date)
⽣成列表中所需值就是使⽤命令的输出。
#!/bin/bash
# reading values from a file
file="states"
#for state in `ps -ef | grep 'tomcat.8701' | awk '{print $2}'`
for state in $(cat $file)
do
echo "visit beautiful $state"
done
states⽂件内容;
Alabama BOb
Tom Console
执⾏结果:
visit beautiful Alabama
visit beautiful BOb
visit beautiful Tom
visit beautiful Console
- 13.1.5、更改字段分隔符
造成这个问题的原因是特殊的环境变量IFS,叫作内部字段分隔符。默认情况下,bash shell会将下列字符当作字段分隔符: *空格
*制表符
*换⾏符
如果bash shell在数据中看到这些字符中的任意⼀个,它就会假定这表明了列表中⼀个新数据字段的开始。
想修改IFS的值,使其只能识别换⾏符,那就必须:
IFS=$'\n'
将这个语句加⼊到脚本中,告诉bash shell在数据值中忽略空格和制表符。
#!/bin/bash
# reading values from a file
file="states"
IFS=$'\n'
for state in $(cat $file)
do
echo "visit beautiful $state"
done执⾏结果:
visit beautiful Alabama BOb
visit beautiful Tom Console
⼀个可参考的安全实践是在改变IFS之前保存原来的IFS值,之后再恢复它。
实现:
IFS.OLD=$IFS
IFS=$'\n'
IFS=$IFS.OLD
这就保证了在脚本的后续操作中使⽤的是IFS的默认值。
遍历⼀个⽂件中⽤冒号分隔的值:
IFS=:
如果要指定多个IFS字符,只要将它们在赋值⾏串起来就⾏。
IFS=$'\n':;"
这个赋值会将换⾏符、冒号、分号和双引号作为字段分隔符。如何使⽤IFS字符解析数据没有任何限制。
13.1.6、⽤通配符读取⽬录
for file in /proc/*;
do
echo $file is file path \! ;
done
- 13.2、类C风格for循环的语法格式
for((expr1; expr2; expr3))
do
command
command
...
done
有些部分并没有遵循bash shell标准的for命令: *变量赋值可以有空格
*条件中的变量不以美元符开头
*迭代过程的算式为⽤expr命令格式
ex9、输出前5个正数
#!/bin/bash
#使⽤类C风格for循环输出1~5
for ((integer = 1; integer <= 5; integer++))
do
echo "$integer"
done
[zhangqi@localhost shellscript]$ sh for_ex9.sh
尽管可以使⽤多个变量,但你只能在for循环中定义⼀种条件。
#!/bin/bash
for ((a=1,b=10;a<=10;a++,b--))
do
echo "$a - $b"
done
执⾏结果:
1 - 10
使⽤类C风格for循环要注意以下事项: a.如果循环条件最初的退出状态为⾮0,则不会执⾏循环体
b.当执⾏更新语句时,如果循环条件的退出状态永远为0,则for循环将永远执⾏下去,从⽽产⽣死循环
c.Linux shell中不运⾏使⽤⾮整数类型的数作为循环变量
d.如果循环体中的循环条件被忽略,则默认的退出状态为0
e.在类C风格的for循环中,可以将三个语句全部忽略掉,下⾯是合法的for循环for((; ; ))
do
echo "hello world"
done
---------------------
第⼀类:数字性循环-->seq在in后⾯的应⽤
#!/bin/bash
#也是产⽣等差数列-->默认是1
for i in $(seq 1 10) #产⽣的是⼀个字符串,默认IFS是以空格隔开!
do
echo $(expr $i \* 3 + 1); #主要是复习:expr乘法的特殊⽤法!-->空格隔开
done
补充:产⽣[1,10]的⾃然数-->{}在in后⾯的应⽤
total=0 #全局变量
for i in {1..100} #".."表⽰连续,默认也是IFS为空格隔开
do
((total+=i))
done
echo -e "total is:${total}"
#多⾏注释
<
for i in mysql_{0,1,4,12}sql #多个⽂件
do
echo $i
samtools view -c $i
done
COMMENT
第⼆类:字符性循环
最原始的
#!/bin/bash
#使⽤列表for循环显⽰周⼀到周⽇对应的英⽂-->学习⽇期的英⽂
for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday
do
echo "$day"
done
变量的类型
#!/bin/bash
list="Linux Java C++ Python"
for i in $list
do
echo -e "Language is ${i}"
done
cat在in后⾯的应⽤-->逐⾏读取⽂件的内容(默认是IFS),所以不是逐⾏打印!
#!/bin/bash
for i in $(cat ⽇志颜⾊.sh) #注意:pwd当前⽬录下的⽂件
do
echo $i
done
思考:如果想逐⾏原样输出!
#!/bin/bash
# reading content from a file
file="⽇志⽂件.sh"
#将这个语句加⼊到脚本中,告诉bash shell在数据值中忽略空格和制表,使其只能识别换⾏符!
IFS=$'\n'
for std in $(cat $file)
do
echo "$std"
done
说明:IFS的⼀些说明!
bash shell会将下列字符当作字段分隔符:空格、制表符、换⾏符
Linux三剑客awk、grep、sed详解
Linux三剑客awk、grep、sed详解
⼀、前⾔
linux 有很多⼯具可以做⽂本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, head, tail.....,学习 linux ⽂本处
理的懒惰⽅式(不是最好的⽅法)可能是:只学习grep,sed和awk。 使⽤这三个⼯具,你可以解决近 99% linux 系统的⽂本处理问题,⽽
不需要记住上⾯不同的命令和参数。:)
⽽且,如果你已经学会并使⽤了三者,你就会知道其中的差异。实际上,这⾥的差异意味着哪个⼯具擅长解决什么样的问题。
⼀种更懒惰的⽅式可能是学习脚本语⾔(python,perl或ruby)并使⽤它进⾏每个⽂本处理。
⼆、概述
awk、grep、sed 是 linux 操作⽂本的三⼤利器,也是必须掌握的 linux 命令之⼀。三者的功能都是处理⽂本,但侧重点各不相同,其中属
awk 功能最强⼤,但也最复杂。grep 更适合单纯地查找或匹配⽂本,sed 更适合编辑匹配到的⽂本,awk 更适合格式化⽂本,对⽂本进⾏较
复杂格式处理。简单概括:
grep:数据查找定位
awk:数据切⽚
sed:数据修改
三、grep = global regular expression print
⽤最简单术语来说,grep(全局正则表达式打印)--命令⽤于查找⽂件⾥符合条件的字符串。 从⽂件的第⼀⾏开始,grep 将⼀⾏复制到 buffer
中,将其与搜索字符串进⾏⽐较,如果⽐较通过,则将该⾏打印到屏幕上。grep将重复这个过程,直到⽂件搜索所有⾏。
注意这⾥没有进程执⾏ grep 存储⾏、更改⾏或仅搜索部分⾏。
1、⽰例数据⽂件
请将以下数据剪切粘贴到⼀个名为 “sampler.log” 的⽂件中:
boot
book
booze
machine
boots
bungie
bark
aardvark
Linux之BASH和SHELL学习总结
Bourne Again SHell (简称 bash)
功能:
1、命令编修能力 .bash_history文件
2、命令与档案补全能力 Tab键
[Tab] 接在一串指令的第一个字的后面,则为命令补全;
[Tab] 接在一串指令的第二个字以后时,则为『档案补齐』!
3、命令别名设定,指令: alias ---alias lm='ls -al',在.bash_profile文件里
4、工作控制、前景背景控制: (job control, foreground, background)-----------------------???????????不懂
5、程序化脚本: (shell scripts)
6、通配符(Wildcard)
bash内建命令 type type [-tpa] name,产看命令是否是bash内建命令,还是外部命令。
命令多行输入 反斜杠'\' 然后紧接回车。
变量取用 echo $variable
变量设定规则
1、等号连接,等号两边没有空格;
2、变量名只能是字母和数字,变量名开头不能为数字;
3、发量内容若有空格符可使用双引号『"』或单引号『'』将发量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示: 『var="lang is $LANG"』则『echo $var』可得『lang is en_US』 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示: 『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』;
4.可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
5、在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『`指令`』或 『$(指令)』。
51CTO学院Linux编程视频课程Shell从入门到精通(完整版)
Linux编程视频课程Shell从入门到精通(完整版)
课程目标
咱们能够通过本次系列的编程技术学习,把握企业里面的运维编程必备脚本,同时把握企业运维到底要求会什么东西,有哪些是咱们必需要把握的知识。
适用人群
适合有linux基础知识,想进一步学好linux的列位同窗,我也会跟大伙儿一路尽力,分享、感恩、成长!
课程简介
【Linux编程视频课程Shell从入门到精通(完整版)】
课程目标:
本套课程适用于初学者和各类运维人员,咱们能够通过本次系列的编程技术学习,把握企业里面的运维编程必备脚本,同时把握企业运维到底要求会什么东西,有哪些是咱们必需要把握的知识,为咱们的运维能力保驾护航、增值加薪,让咱们的运维加倍容易,真正做到懒人运维,而不是天天苦逼的搬效劳器,天天无奈的去救火!
适合对象:
适合有linux基础知识,想进一步学好linux的列位同窗,我也会跟大伙儿一路尽力,分享、感恩、成长!
学习条件:
需要有耐心、对自己负责,对自己的人一辈子负责,选择了决定以后,选择了就全力以赴去行动,相信结果值得拥有!
学习宣言: 让咱们乘着Linux的大船,奔向咱们以后的方向!期待和祝愿同窗们每一个人都有好的收成,天天都有新的起点!人人都能学会咱们的linux下Shell编程。
课程
1
Linux下Shell编程基础入门
[免费观看]
14分钟
说到Shell编程,我想很多从事Linux运维工作的朋友都不陌生,都对Shell有大体的了解,可能大伙儿刚开始接触Shell的时候,有各类方式? 能不能不学? 高大上? 究竟是浮云?仍是神马? 很难啊? 我想告知大伙儿的是,大伙儿有这些方式一点都不感觉惊讶,什么缘故?这些都很正常,关于任何一件情形在未开始之前,确信会有总总假设,那我今天想说的是,学完人人都会Shell编程后,咱们会感觉一切的Shell都是浮云,咱们每一个人都能专门好的利用它,驾驭它,更好的完成咱们日常运维的工作。 曾经有人说过,玩Linux不明白Shell,那确实是不懂Linux;此刻细细体味确实是如此。为了让更多的人能接触Shell、了解Shell,利用Shell,因此今天开设了如此一个网络课程,让咱们的Shell飞起来。
linux csh while 循环语句
在 Linux 中,csh 是一个流行的 shell,但与 bash、sh、ksh 等其他 shell 相比,csh 的语法有所不同。在 csh 中,你不能直接使用 while 循环,但你可以使用 foreach 循环结构来实现类似的功能。
以下是一个如何在 csh 中使用 foreach 循环的示例,该循环的行为类似于 while 循环:
csh复制代码
#!/bin/csh
set counter = 1
foreach i (1 2 3 4 5) # 这将循环5次,类似于while(counter <= 5)
echo "Counter: $counter, Value: $i"
set counter = `expr $counter + 1`
end
在上面的示例中,我们使用 foreach 循环来迭代数字 1 到 5。每次迭代时,我们打印当前的计数器和值,并递增计数器。这相当于以下的 while 循环:
csh复制代码
#!/bin/csh
set counter = 1
while ($counter <= 5)
echo "Counter: $counter, Value: $counter"
set counter = `expr $counter + 1`
end
请注意,虽然 csh 的语法与 bash 或其他流行的 shell 有所不同,但它们的核心概念是相似的。如果你习惯于使用其他 shell,可能需要一些时间来适应 csh 的语法。
Linux张同光版课后习题答案
1
1.填空题
(1)GNU的含义是(国际性的源代码开放)。
(2)Linux的版本号分为:(内核版本)和(发行版本)。
(3)安装Linux时最少需要三个个分区,分别是(boot分区)和(根分区)和(swap分区)。
(4)Linux默认的系统管理员帐号是(root)。
(5)如果Linux启动后进入命令行模式,要进入GUI,可执行(init5)命令。
(6)RHEL6.2默认的系统引导工具是(GRUB)。
(7)GRUB的用户界面有三种:(菜单模式)、(菜单编辑模式)和(命令行模式)。
(8)GRUB的默认菜单文件menu.lst其实是(grub.conf)文件的符号链接。
(9)硬盘的第0柱,第0面,第1扇区,这个扇区叫做(MBR)。
(10)MBR由三部分组成:(主引导程序)、(硬盘分区表DPT)和(硬盘有效标志)。
(11)内核的分类:(单片型内核)、(模块型内核)。
(12)(初始化内存映像盘)称为初始化内存盘,为系统提供一系列内核映像无法提供的模块,这些模块对正确引导系统非常重要。
(13)在内核加载完毕、进行完硬件检测与驱动程序加载后,此时主机硬件已经准备就绪了,这时候内核会启动一号进程(/sbin/init)。
(14)RHEL6系统上,文件(etc/inittab)只能设置运行级别。
(15)(etc/rc.d/init.d)文件是在系统启动最后一个被读取的用户自定义启动脚本文件。
(16)操作系统为用户提供了两种接口,分别是(命令界面)和(程序界面)。
(17)命令接口演化为两种主要形式,分别是(命令行界面)和(图形用户界面)。
(18)Linux中的两个主要的桌面环境是(KDE)和(GNOME)。
(19)输入重定向符是(<)。
(20)输出重定向符是(>)和(>>)。
(21)错误输出重定向符是(2>)和(2>>)。
(22)管道符是(|)。
(23)Vim拥有5种编辑模式:(命令模式)、(输入模式)、(末行模式)、(可视化模式)和(查询模式)。
Linux与Unixshell编程指南(完整高清版).pdf
Linux与Unixshell编程指南(完整⾼清版).pdf
找到⼀本很详细的Linux Shell脚本教程,其实⾥⾯不光讲了Shell脚本编程,还介绍了系统的各种命令
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的⽂字处理以及少量的系统管理问题。本书内容全
⾯、⽂字简洁流畅,适合Shell编程⼈员学习、参考。
⽬ 录
译者序
前⾔
第⼀部分 shell
第1章 ⽂件安全与权限 11.1 ⽂件 1
1.2 ⽂件类型 2
1.3 权限 2
1.4 改变权限位 4
1.4.1 符号模式 4
1.4.2 chmod命令举例 5
1.4.3 绝对模式 5
1.4.4 chmod命令的其他例⼦ 6
1.4.5 可以选择使⽤符号模式或绝对模式 7
1.5 ⽬录 7
1.6 suid/guid 7
1.6.1 为什么要使⽤suid/guid 8
1.6.2 设置suid/guid的例⼦ 8
1.7 chown和chgrp 9
1.7.1 chown举例 9
1.7.2 chgrp举例 9
1.7.3 找出你所属于的⽤户组 9
1.7.4 找出其他⽤户所属于的组 10
1.8 umask 10
1.8.1 如何计算umask值 10
1.8.2 常⽤的umask值 11
1.9 符号链接 12
1.9.1 使⽤软链接来保存⽂件的多个映像 12
1.9.2 符号链接举例 12
1.10 ⼩结 13
第2章 使⽤find和xargs 142.1 find命令选项 14
2.1.1 使⽤name选项 15
2.1.2 使⽤perm选项 16
2.1.3 忽略某个⽬录 16
2.1.4 使⽤user和nouser选项 16
2.1.5 使⽤group和nogroup选项 16
2.1.6 按照更改时间查找⽂件 17
2.1.7 查找⽐某个⽂件新或旧的⽂件 17
2.1.8 使⽤type选项 17
2.1.9 使⽤size选项 18
2.1.10 使⽤depth选项 18
《Linux操作系统(第2版))》课后习题答案
《 Linux 操作系统(第 2 版)》课后习题答案
1.6 练习题
一、选择题
1. Linux 最早是由计算机爱好者 B 开发的。
A. Richard PetersenB. Linus Torvalds C. Rob Pick D. Linux Sarwar
2. 下列 C 是自由软件。
A. Windows XP B. UNIX C. Linux D. Windows 2000
3. 下列 B 不是 Linux 的特点。
A. 多任务 B. 单用户 C. 设备独立性 D. 开放性
4. Linux 的内核版本 2.3.20 是 A 的版本。
A. 不稳定 B. 稳定的 C. 第三次修订 D. 第二次修订
5. Linux 安装过程中的硬盘分区工具是 D 。
A. PQmagic B. FDISK C. FIPS D. Disk Druid
6. Linux 的根分区系统类型是 C 。
A. FATl6 B. FAT32 C. ext4 D. NTFS
二、填空题
1. GNU 的含义是: GNU's Not UNIX 。
2. Linux 一般有 3 个主要部分:内核( kernel)、命令解释层( Shell 或其他操作环境) 、
实用工具。
3. 安装 Linux 最少需要两个分区,分别是 swap 交换分区和 /(根)分区 。
4. Linux 默认的系统管理员账号是root 。
三、简答题 (略)
1.简述 Red Hat Linux 系统的特点,简述一些较为知名的 Linux 发行版本。 2.Linux 有哪些安装方式 ?安装 Red Hat Linux 系统要做哪些准备工作 ?
3.安装 Red Hat Linux 系统的基本磁盘分区有哪些 ?
4.Red Hat Linux 系统支持的文件类型有哪些?
linux shell中sleep的用法
linux shell中sleep的用法
关于Linux shell中的sleep命令,下面是一个详细的回答。
一、什么是sleep命令?
Sleep命令是Linux shell中的一条时间控制命令,用于在脚本中暂停一段时间。它可以根据指定的时间长度阻止进程继续执行,等待一段时间后再继续执行后续命令。可以认为,sleep命令是一种实现延时操作的方法。
二、sleep命令的基本语法
Sleep命令的基本语法如下:
sleep NUMBER[SUFFIX]
其中,NUMBER表示需要延时的时间段,可以是一个整数或者浮点数,单位是秒。SUFFIX是可选的后缀,可以为"s"、"m"、"h"、"d",分别表示秒、分钟、小时和天。
在实际使用中,一般直接使用整数值就足够了。例如,sleep 5表示创建一个暂停执行的进程,持续5秒钟。
三、使用示例
我们来看几个简单的使用示例,以更好地理解sleep命令的实际用途。
示例1:延时执行命令
假设我们需要在脚本中执行两个命令,但需要给它们之间留出一些时间。我们可以使用sleep命令来实现延时效果。以下是一个示例脚本:
#!/bin/bash
echo "开始执行第一个命令"
sleep 5
echo "开始执行第二个命令"
这个脚本中,第一个echo命令会立即执行,然后使用sleep命令延时5秒钟,最后再执行第二个echo命令。
示例2:循环延时
有时候我们可能需要在脚本中加入一些循环,然后在每次循环之间停顿一段时间。以下是一个示例脚本:
#!/bin/bash
for i in {1..5}
do
echo "循环中的第 i 次操作"
sleep 1
done
这个脚本中,使用for循环执行了5次操作,并在每次循环中使用sleep命令停顿1秒钟。
四、注意事项
在使用sleep命令时,还需要注意以下几点:
1. sleep命令的时间参数可以是小数或者整数。例如,sleep 3.5 表示延时3.5秒。
Linux Bash Shell入门教程
BASH 的基本语法
最简单的例子 —— Hello World!
关于输入、输出和错误输出
BASH 中对变量的规定(与 C 语言的异同)
BASH 中的基本流程控制语法
函数的使用
2.1 最简单的例子 —— Hello World!
几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。
用 vi 编辑器编辑一个 hello 文件如下:
#!/bin/bash
# This is a very simple example
echo Hello World
这样最简单的一个 BASH 程序就编写完了。这里有几个问题需要说明一下:
一,第一行的 #! 是什么意思
二,第一行的 /bin/bash 又是什么意思
三,第二行是注释吗
四,echo 语句
五,如何执行该程序
#! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令 及 /usr/share/magic 文件来了解这方面的更多内容。在 BASH 中 第一行的 "#!" 及后面的 "/bin/bash" 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 "locate bash" "find / -name bash 2> /dev/null" 或 "whereis bash" 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。
Shell 脚本基础学习笔记
Shell 脚本基础学习笔记 版本历史 详细内容 时间 修订者
V1 新建 2010 hxghan@
shell脚本的解释用“#”号,本文档为了习惯方便,解释大都用“//”,也有用“#”的
SHELL 最基本的语法 shell内部变量
$# 将存放命令行传入的所有参数
$* 所有的命令行参数。
“$*”表示shell文件的所有参数及其空格连在一起作
为单个词处理;
$@ 同上,稍有区别。
“$@”与shell文件接收的参数等价,参数中的空格
被忽略,其结果是等同于原来参数的一个单词列表
$- Shell的选择项
$? 上次执行命令返回值
$$ Shell的进程标识符
$! 用&启动的最后一个命令的进程标识符
$IFS 参数分割词的字符表
$MAIL 信件文件,当其改变时给出信息you have mail
$PATH 搜索命令的目录表
$PS1 提示符串,缺省为$
$PS2 后继命令行提示符,缺省为>
逻辑表达式
s1 = s2 若字符串 s1等s2一样
s1 != s2 若字符串 s1 不等于 s2 则运算结果为真
-n s1 若字符串s1不为零则为真
-z s1 字符串s1空为真
数值比较运算符
d1 lt d2 若d1小于d2则运算结果为真,否则为假
d1 le d2 若d1小于或等于d2则运算结果为真,否则为假
d1 eq d2 若d1等于d2则结果为真否则为假
d1 ge d2 若d1大于或等于d2则运算结果为真,否则为假
d1 gt d2 若d1大于 d2则运算结果为真,否则为假
文件判断运算符
-b fname 若fname存在且为块设备则结果为真,否则为假
-c fname 若fname存在且为字符文件,则结果为真否则为假 -d fname 若fname存在且是一个目录则结果为真,否则为假
-f fname 若fname存在且是一个普通文件则结果为真否则为
假
-h fname 若fname存在且为一个隐含文件,则结果为真,否则为
