Unix shell判断和比较
1. shell 的$! ,$?, $$,$@
- $n $1 the first parameter,$2 the
second...
- $# The number of command-line
parameters.
- $0 The name of current program.
- $? Last command or function's return
value.
- $$ The program's PID.
- $! Last program's PID.
- $@ Save all the parameters.
any shell book will talk about them,from which you can get their detail
usages. 2 Linux SHELL if 命令参数说明
- –b 当file存在并且是块文件时返回真
- -c 当file存在并且是字符文件时返回真
- -d 当pathname存在并且是一个目录时返回真
- -e 当pathname指定的文件或目录存在时返回真
- -f
当file存在并且是正规文件时返回真 - -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
- -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
- -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
- -p 当file存在并且是命令管道时返回为真
- -r 当由pathname指定的文件或目录存在并且可读时返回为真
- -s
当file存在文件大小大于0时返回真 - -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
- -w
当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 - -o
当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
- -eq 等于
- -ne 不等于
- -gt 大于
- -lt 小于
- -le 小于等于
- -ge 大于等于
- -z 空串
- = 两个字符相等
- != 两个字符不等
- -n 非空串
-e filename 假如
filename存在,则为真 [ -e /var/log/syslog ]
-d filename 假如 filename为目录,则为真 [ -d
/tmp/mydir ]
-f filename 假如
filename为常规文档,则为真 [ -f /usr/bin/grep ]
-L filename 假如 filename为符号链接,则为真 [ -L
/usr/bin/grep ]
-r filename 假如
filename可读,则为真 [ -r /var/log/syslog ]
-w filename 假如 filename可写,则为真 [ -w
/var/mytmp.txt ]
-x filename 假如
filename可执行,则为真 [ -L /usr/bin/grep ]
filename1-nt filename2 假如 filename1比
filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 假如 filename1比
filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符
(请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 假如 string长度为零,则为真 [ -z "$myvar"
]
-n string 假如 string长度非零,则为真 [
-n "$myvar" ]
string1= string2 假如
string1和 string2相同,则为真 [ "$myvar" = "one two three" ]
string1!= string2 假如 string1和
string2不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2 等于 [ 3 -eq
$mynum ]
num1-ne num2 不等于 [ 3 -ne
$mynum ]
num1-lt num2 小于 [ 3 -lt
$mynum ]
num1-le num2 小于或等于 [ 3
-le $mynum ]
num1-gt num2 大于 [ 3
-gt $mynum ]
num1-ge num2 大于或等于 [
3 -ge $mynum ] 本文摘自网络 +++++++++++++++++++++++++++++++++++++++++++ shell判断文件,目录是否存在或者具有权限
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath" ]; then
mkdir "$myPath"
fi
#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath" ]; then
mkdir "$myPath"
fi
#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi
#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi
#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
========================================
shell
判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部分: if ....; then
....
elif
....;
then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x
"/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" =
"$b" ] :判断$a和$b是否相等 -r file 用户可读为真
-w file 用户可写为真
-x
file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c
file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t
file 当文件描述符(默认为1)指定的设备为终端时为真
#########################################################
对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有:
-eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le
—参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [
-f "filename" ])
-d — 检查目录是否存在
几
乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。
##################################################################
判断文件是否存在
today=`date -d yesterday
+%y%m%d`
file="apache_$today.tar.gz"
cd /home/chenshuo/shell
if [ -f
"$file" ];then
echo "OK"
else
echo "error $file" >error.log
-s "fail backup from test" test@test.com<error.log
fi
Unix shell判断和比较的更多相关文章
- 【转载】Unix Shell中用[-n]判断字符串不为NULL
转载自:http://blog.sina.com.cn/s/blog_541086430100mosm.html 在Unix Shell中,可以使用-n来判断一个string不是NULL值,但是之前却 ...
- linux脚本:shell, 判断输入参数的个数(命令行)
if [ $# != 3 ] ; thenecho "USAGE: $0 from to"echo " e.g.: $0 ~/oucaijun/from ~/oucaij ...
- 【转】fnmatch模块的使用——主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格
[转]fnmatch模块的使用 fnmatch模块的使用 此模块的主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格.fnmatch比较简单就4个方法分别是:fnmatch,fnm ...
- shell判断和比较
http://blog.chinaunix.net/uid-7553302-id-183648.html 1 shell 的$! ,$?, $$,$@ $n $1 the first ...
- shell判断文件是否存在
转自:http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html 1. shell判断文件,目录是否存在或者具有权限 2. #!/bi ...
- Shell 判断
1 shell 的$! ,$?, $$,$@ $n $1 the first parameter,$2 the second... $# The number of co ...
- Linux shell判断文件和文件夹是否存在
shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/acc ...
- shell 判断字符串是否为数字
本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...
- Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...
随机推荐
- C连接oracle数据库
int db_conn_main() { EXEC SQL BEGEIN DECLARE SECTION; +]; +]; +]; varchar username[]; varchar passwo ...
- [转]SQL 模糊查询
在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表 ...
- go get
go get 命令用于从远程代码仓库(比如 Github )上下载并安装代码包.注意,go get 命令会把当前的代码包下载到 $GOPATH 中的第一个工作区的 src 目录中,并安装. 如果在 g ...
- 数据结构_find_lucky_number(寻找幸运值)
数据结构_find_lucky_number(寻找幸运值) 问题描述 给出两个已按升序排列的数组 a[1..n],b[1..m],如果存在 i,j,使得a[i]+b[j]==k,我们便说已找到幸运值. ...
- C++--VECTOR的简单应用
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...
- DiscreteFrechetDist
计算离散的frechet 距离,通过计算两条曲线之间的点的距离,将两条曲线上的点按照距离以及曲线的趋势进行配对,最后根据这些配对的距离选出最后的离散frechet距离(compute discrete ...
- java反射机制的进一步理解
承上一篇. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...
- 水平居中的那些事之解决jqpagination分页插件无法居中的问题
固定宽度的元素水平居中只需要 margin-left:auto: margin-right:auto; 换成 margin:0 auto; 也是一样的 今天给我用的jqPagination分页插件实现 ...
- 使用metasploit进行栈溢出攻击-4
有了漏洞我们就可以进行攻击了.首先我们需要了解metasploit的exploit模块,具体可以看 http://www.offensive-security.com/metasploit-unlea ...
- Binder学习笔记(八)—— 客户端如何组织Test()请求 ?
还从客户端代码看起TestClient.cpp:14 int main() { sp < IServiceManager > sm = defaultServiceManager(); / ...