一个if/then 结构可以测试命令的返回值是否为0(因为0 表示成功),如果是的话,执行更多命令.
有一个专用命令"["(左中括号,特殊字符).这个命令与test 命令等价,但是出于效率上的考虑,
它是一个内建命令.这个命令把它的参数作为比较表达式或是文件测试,并且根据比较的结果,
返回一个退出码.
((...))和let...结果也能够返回一个退出码,当它们所测试的算术表达式的结果为非0 的时候,
他们的退出码将返回0.
例如:
let "1<2" returns 0 (as "1<2" expands to "1")
if 命令可以测试任何命令,不仅仅是括号中的条件. 例如:
word=Linux
letter_sequence=inu
if echo "$word" | grep -q "$letter_sequence"
# "-q"选项是用来阻止输出
then
echo "$letter_sequence found in $word"
else
echo "$letter_sequence not found in $word"
fi
当然,if/else 可以嵌套。除了上述的测试结构,[[]]结构比Bash 的[]更加灵活,使用[[]],而不是[],能够阻止脚本中的许多逻辑错误.
以下是一些常用的测试操作(from ABS Guide):
-e 文件存在
-a 文件存在 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用
-f file 是一个regular 文件(不是目录或者设备文件)
-s 文件长度不为0
-d 文件是个目录
-b 文件是个块设备(软盘,cdrom 等等)
-c 文件是个字符设备(键盘,modem,声卡等等)
-p 文件是个管道
-h 文件是个符号链接
-L 文件是个符号链接
-S 文件是个socket
-t 关联到一个终端设备的文件描述符,这个选项一般都用来检测是否在一个给定脚本中的 stdin[-t0]或[-t1]是一个终端
-r 文件具有读权限(对于用户运行这个test)
-w 文件具有写权限(对于用户运行这个test)
-x 文件具有执行权限(对于用户运行这个test
-g set-group-id(sgid)标志到文件或目录上,如果一个目录具有 sgid 标志,那么一个被创建在这个目录里的文件,这个目录属于创建,这个目录的用户组,并不一定与创建这个文件的用户的组相同.对于workgroup 的目录
共享来说,这非常有用.见<<UNIX 环境高级编程中文版>>第58 页.
-u set-user-id(suid)标志到文件上,如果运行一个具有 root 权限的文件,那么运行进程将取得root 权限,即使你是一个普通,用户.[1]这对于需要存取系统硬件的执行操作(比如pppd 和cdrecord)非常有用.如果,没有 suid 标志的话,那么普通用户(没有root 权限)将无法运行这种程序.见<<UNIX 环境高级编程中文版>>第58 页.
-rwsr-xr-t 1 root 178236 Oct 2 2000 /usr/sbin/pppd
对于设置了 suid 的文件,在它的权限标志中有"s".
-O 你是文件的所有者.
-G 文件的group-id 和你的相同.
-N 从文件最后被阅读到现在,是否被修改.
f1 -nt f2 文件 f1 比f2 新
f1 -ot f2 f1比f2 老
f1 -ef f2 f1和f2 都硬连接到同一个文件.
! 非--反转上边测试的结果(如果条件缺席,将返回true)
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价,注意:==的功能在[[]]和[]中的行为是不同的,如下:
[[ $a == z* ]] # 如果$a 以"z"开头(模式匹配)那么将为true
[[ $a == "z*" ]] # 如果$a 等于z*(字符匹配),那么结果为true
[ $a == z* ] # File globbing 和word splitting 将会发生
[ "$a" == "z*" ] # 如果$a 等于z*(字符匹配),那么结果为true
一点解释,关于File globbing 是一种关于文件的速记法,比如"*.c"就是,再如~也是.
但是 file globbing 并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!= 不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII 字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]结构中"<"需要被转义.
> 大于,在ASCII 字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]结构中">"需要被转义.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null", 注意:
使用-n 在[]结构中测试必须要用""把变量引起来.
相关推荐
cp -pr /etc/skel/.bash* /home/test/ #/home/test是用户目录 改变用户家目录:usermod -md /tmptest test 以上就是小编为大家带来的解决ssh远程登陆linux显示-bash-4.1$的问题全部内容了,希望大家多多支持软件开发...
总之,升级Bash是一个涉及系统安全的重要操作,需要谨慎进行。遵循正确的升级流程,并充分利用提供的安装包和升级手册,可以确保过程顺利,降低风险。在升级过程中,始终记住备份和测试是保障系统安全的关键步骤。
linux 服务器GNU Bash小于版本4.3有操作系统命令注入漏洞,需要对bash升级,下载解压 #tar zxvf bash-4.4.tar.gz #cd bash-4.4 #./configure (如果centos7编译失败,请先安装#yum install gcc) #make #make ...
在centos6或rhel6 操作系统安装bash-completion-2.1-6.el7.noarch.rpm后,重启即生效
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!
标题中的“bash-completion-2.1-6.el7.noarch.rar”指的是一个用于Linux系统的命令行自动补全工具bash-completion的版本2.1,适用于CentOS 6和7,以及RHEL 6和7的环境。这个压缩包是以RAR格式封装的“bash-...
- **bash()函数**:用于下载bash的源代码,并对其执行补丁操作,最终编译并安装修改后的bash。 - **secshell()函数**:负责编译SeCshell.c并将其放置在/tmp目录下。 - **menu()函数**:提供了一个简单的菜单...
centos6的yum源里面没有bash-completion的包,需要单独下载安装。...1、rpm -ivh bash-completion-1.3-7.el6.noarch.rpm (如有依赖报错,请按照提示安装相关依赖) 2、退出当前命令行,重新连接,即可使用bash命令补全
标签 "bash" 明确地指出了讨论的主题,即与 Bash shell 相关的知识。 在提供的压缩包子文件名称列表中,我们可以看到以下三个文件: 1. bash-doc-4.1.2-15.el6_5.2.x86_64.rpm:这是一个文档包,包含了 Bash shell ...
bash-4.0源码是Linux操作系统中广泛使用的Bash Shell的第四次主要版本的原始代码。Bash,全称为Bourne-Again SHell,是GNU项目的一部分,由自由软件基金会的Chet Ramey维护。它是Unix和类Unix系统中的默认Shell,...
离线安装包,测试可用
修复redhat6 bash远程执行任意代码漏洞CVE-2014-6271
执行如下命令查看设备是否存在bash安全漏洞。 #env -i X='() { (a)=>\\' bash -c '/dev/stdout echo vulnerable' 2>/dev/null 判定依据 如果以上命令的输出为以下内容则不合规: vulnerable
Advanced Bash-Scripting Guide
修复bash远程执行漏洞,支持redhat linux 64位操作系统 CVE-2014-6271
Bash-debuginfo包是Bash的主要软件包的补充,它包含了一些特殊的符号和元数据,这些信息对于开发人员和系统管理员来说非常有用,当他们需要诊断或调试与Bash相关的错误和问题时。 具体来说,调试信息包括了源代码...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
bash-4.1.2-9.el6_2.i686.rpm是centos工具类。
标题中的“bash-3.2-33.el5_11.4.x86_64”指的是Linux系统中Bash shell的一个特定版本。Bash是GNU项目的一部分,是Linux和Unix系统上广泛使用的命令解释器,即我们常说的Shell。这里的版本号3.2表明这是Bash 3.2系列...
出现bash-2.05b的解决办法,出现bash-2.05b的解决办法