我们在服务器上经常能看到很多复制,启动停止程序的脚本,下面就来慢慢学学…… 菜鸟一枚如有错误还请大家指教 一、文件状态的测试 1、文件状态有: -d(directory):目录 -L(link): 符号链接 -f (file): 正规文件 -r (read) 可读 -w (write) : 可写 -x(ecexute) 可执行 -u(set user id) 文件有suid 位设置 -s : 文件长度大于0 非空 这里冒昧的写了简称的全称,这样写便于记忆,如有写错请指正谢谢~ 2、测试的方式有两种: 1)、test condition 2)、[ condition ] 这里注意[ 和字符以及] 和字符之间有空格的。 3、实例 ,测试是正规文件还是目录: 1)、 test -f Java && echo "file" || "not file" 2)、[ -f java ] && echo "file" || "not file" 3)、test -r java && echo "can read" || echo "can not read" 3、&& 、||命令执行控制 解释:
&&、语法格式如下:
a.命令之间使用 && 连接,实现逻辑与的功能。
||、语法格式如下:
a.命令之间使用 || 连接,实现逻辑或的功能。 4、在判断的时候添加逻辑操作 1)、[ -f java -a -f java1] && echo " all file" || echo " not file all" 只有在java和java1 为标准文件的时候 才会输出 all file 否则为not file all 2)、[-f java -o -f java1] && echo "file" || echo "all not file" 只要有一个是标准文件则会输出file 否则会输出 all not file 5、 -a 、-o 、! 解释 1)、-a 操作符两边都为真的时候才是正,否则为假。 2)、-o 操作符一边为真则为真,否则为假。 3)、! 条件为假 结果为真,条件为真结果为假。
二、字符串的判断比较 字符串的判断,比较我们经常看到的有,是否为空,两个字符串是否相等等这些方式,下面看看具体的比较: 1、比较方式和上面的一致,即使用 test 和[ ] 两种方式。
2、 字符串中常见的判断,比较符号如下: 3、实例如下: 1)、测试字符串相等: a="java" b="c" test "$a" = "$b" 执行后查看比较结果: echo $? 如果为1 则表示不相等如果是0 则表示相等 2)、 不适用test 而是使用 [ ] 来实现 但要记得两边的空格 [ "$a" = "$b" ] echo $? 如果输出为1 则表示不相等如果输出为0 则表示相等 不相等和 相等的判断格式是一样的。 3)、判断是否为空 : test -z "test" 如果echo $? 输出为 1 则表示为空 0 则表示非空 4)、 test -n "test" 如果 echo$? 输出为1 则表示不为空而0 则表示为空 5)、同样字符串的比较也可以使用 [ ] 来实现。 [ -z "test" ] 如果 echo $? 输出1 则表示为空 0 则表示非空 [ -n "test" ] 他的echo $? 结果和之前的相反了。 [ -z "$a" ] [ -n "$a" ] 来判断变量是否为空。
三、判断数值的大小以及相等 1、 其实数值的大小比较和字符串是否相等的比较的格式是一样的,所以这里就不一一例举了。下面将各个简称的全拼列出来这样方便记忆 2、各个简称、全称如下:(greater 教大的)
-eq 就是 EQUAL等于
四、expr命令 1、expr 的命令格式 expr argumeng operator argument 来计算数值,如果最后的结果是 数值则 输出的是0 即 $? 的值为0 否则不为0
五、上面列举了一些命令的格式,下面就使用这些命令来编写一下脚本实现某些功能 1、使用 && 、|| 命令执行控制符来复制文件,如果文件复制成功则删除原来的文件,否则输出复制失败。
[plain] view plain copy
![]()
这个可以一个一个的敲代码也可以 写到文件中执行 注意: 在linux中 获取系统当前的时间的方式有两种 (1)、获取时间并赋值给变量 var=`date +%Y-%m-%d` (这里注意 将date 等圈起来的不是单引号而是左上角的英文点号,也就是反引号) (2)、var =$(date +%Y%m%d) (1和2是两种不同的获取时间的方式,而%Y 和%m之间的是 显示时间的格式,和获取没有关系) 获取时间到秒: var=$(date +%Y%m%d%H%M%S) 从两种获取时间的方式看 感觉$() 这种方式简洁些, 这里的这种圆括号和反引号吧里面的内容当做了命令来执行,这和单引号和双引号不同。 2、上面我们获取了当前时间,但是我们要想获取当前时间的 前一天,前一个星期,前一个月,前一年,后一天,后一星期等怎么获取那具体的方式如下: (1)、获取当前时间: var=$(date +%Y%m%d) (2)、获取当前时间的前一天: var=$(date -d "1 day ago" +%Y%m%d) (3)、获取当前时间的前一星期: var=$(date -d "1 week ago" +%Y%m%d) (4)、获取当前时间的前一个月:var=$(date -d "1 month ago" +%Y%m%d)
(5)、获取当前时间的前一年: var=$(date -d "1 year ago" +%Y%m%d) 获取后一天,一周,一星期,一个月,一年前面加负号就可以
(1)、获取当前时间: var=$(date +%Y%m%d) (2)、获取当前时间的后一天: var=$(date -d "-1 days ago" +%Y%m%d) (3)、获取当前时间的后一星期: var=$(date -d "-1 week ago" +%Y%m%d) (4)、获取当前时间的后一月:var=$(date -d "-1 month ago" +%Y%m%d) (5)、获取当前时间的后一年: var=$(date -d "-1 year ago" +%Y%m%d)
平时我们看到的日志文件都是按照时间命名的,要么在前面,要么在后面,所以我们可以使用获取时间的方式来定期删除某些日志文件:
[plain] view plain copy
![]()
这样就删除了当前时间(20151012)的前一天的那个文件 即:20151011.txt 文件
六、 单引号 、双引号、反引号以及各种括号的了解(部分来自网络) **、 在上面我们也看到了 反引号和 小括号的使用,下面我们就了解一下 平时常用到的引号以及括号的区别
1、单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题。 因为空格在linux中作为一个很典型的分隔符,比如string1=this is string,这样执行就会报错。为了避免这个问题,因此就产生了单引号和双引号。 (1)、他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`。
所以下面的结果:
2、反引号`` 反引号和$()是一样的。在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果重新加入到原命令行中,例如:
echo `ls`
3、小括号,中括号,和大括号的区别
那么,下面又涉及到了一个问题,就是小括号,中括号,和大括号的区别。 4、$( )的用途和反引号` `一样,用来表示优先执行的命令,比如ls -l 5、${ }就是取变量的值,比如:echo ${PATH} (责任编辑:IT) |