SHELL脚本编程的条件测试
SHELL脚本编程的条件测试
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.条件测试概述
判断某需求是否满足,需要由测试机制来实现
专用的测试表达式需要由测试命令辅助完成测试过程 评估布尔声明,以便用在条件性执行中
若真,则返回0
若假,则返回1 测试命令:
test EXPRESSION
[ EXPRESSION ]
#推荐使用这种风格,易读性更强,操作系统很多脚本判断都是用的这种风格,不过还是看你自己个人习惯,毕竟bash的测试命令支持这三种风格,相当灵活。
[[ EXPRESSION ]]
#支持正则表达式和通配符,
#"==","!="符号右侧可使用通配符,左侧变量名建议加双引号("")
#"=~"符号右侧可使用正则表达式,左侧变量名建议加双引号("")
注意:EXPRESSION前后必须有空白字符
[root@node101.yinzhengjie.org.cn ~]# a=""
[root@node101.yinzhengjie.org.cn ~]# test -n "$a"
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test -z "$a"
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# [ -n "$a" ] #推荐使用这种风格,易读性更强,其实操作系统的很多脚本都是使用这种风格的哟~
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# [ -z "$a" ]
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# [[ -z "$a" ]]
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# [[ -n "$a" ]]
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
测试案例戳这里
[root@node101.yinzhengjie.org.cn ~]# help test
test: test [expr]
Evaluate conditional expression. Exits with a status of (true) or (false) depending on
the evaluation of EXPR. Expressions may be unary or binary. Unary
expressions are often used to examine the status of a file. There
are string operators and numeric comparison operators as well. The behavior of test depends on the number of arguments. Read the
bash manual page for the complete specification. File operators: -a FILE True if file exists.
-b FILE True if file is block special.
-c FILE True if file is character special.
-d FILE True if file is a directory.
-e FILE True if file exists.
-f FILE True if file exists and is a regular file.
-g FILE True if file is set-group-id.
-h FILE True if file is a symbolic link.
-L FILE True if file is a symbolic link.
-k FILE True if file has its `sticky' bit set.
-p FILE True if file is a named pipe.
-r FILE True if file is readable by you.
-s FILE True if file exists and is not empty.
-S FILE True if file is a socket.
-t FD True if FD is opened on a terminal.
-u FILE True if the file is set-user-id.
-w FILE True if the file is writable by you.
-x FILE True if the file is executable by you.
-O FILE True if the file is effectively owned by you.
-G FILE True if the file is effectively owned by your group.
-N FILE True if the file has been modified since it was last read. FILE1 -nt FILE2 True if file1 is newer than file2 (according to
modification date). FILE1 -ot FILE2 True if file1 is older than file2. FILE1 -ef FILE2 True if file1 is a hard link to file2. String operators: -z STRING True if string is empty. -n STRING
STRING True if string is not empty. STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically. Other operators: -o OPTION True if the shell option OPTION is enabled.
-v VAR True if the shell variable VAR is set
! EXPR True if expr is false.
EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
EXPR1 -o EXPR2 True if either expr1 OR expr2 is true. arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne,
-lt, -le, -gt, or -ge. Arithmetic binary operators return true if ARG1 is equal, not-equal,
less-than, less-than-or-equal, greater-than, or greater-than-or-equal
than ARG2. Exit Status:
Returns success if EXPR evaluates to true; fails if EXPR evaluates to
false or an invalid argument is given.
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# help test
[root@node101.yinzhengjie.org.cn ~]# help \[
[: [ arg... ]
Evaluate conditional expression. This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
[[ ... ]]: [[ expression ]]
Execute conditional command. Returns a status of or depending on the evaluation of the conditional
expression EXPRESSION. Expressions are composed of the same primaries used
by the `test' builtin, and may be combined using the following operators: ( EXPRESSION ) Returns the value of EXPRESSION
! EXPRESSION True if EXPRESSION is false; else false
EXPR1 && EXPR2 True if both EXPR1 and EXPR2 are true; else false
EXPR1 || EXPR2 True if either EXPR1 or EXPR2 is true; else false When the `==' and `!=' operators are used, the string to the right of
the operator is used as a pattern and pattern matching is performed.
When the `=~' operator is used, the string to the right of the operator
is matched as a regular expression. The && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
determine the expression's value. Exit Status:
or depending on value of EXPRESSION.
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# help \[
[root@node101.yinzhengjie.org.cn ~]# help \[\[
[[ ... ]]: [[ expression ]]
Execute conditional command. Returns a status of or depending on the evaluation of the conditional
expression EXPRESSION. Expressions are composed of the same primaries used
by the `test' builtin, and may be combined using the following operators: ( EXPRESSION ) Returns the value of EXPRESSION
! EXPRESSION True if EXPRESSION is false; else false
EXPR1 && EXPR2 True if both EXPR1 and EXPR2 are true; else false
EXPR1 || EXPR2 True if either EXPR1 or EXPR2 is true; else false When the `==' and `!=' operators are used, the string to the right of
the operator is used as a pattern and pattern matching is performed.
When the `=~' operator is used, the string to the right of the operator
is matched as a regular expression. The && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
determine the expression's value. Exit Status:
or depending on value of EXPRESSION.
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# help \[\[
二.bash的数值测试(两个整数之间比较)
-v VAR
变量VAR是否设置 数值测试:
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
[root@node101.yinzhengjie.org.cn ~]# test -v age1
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# test $age1 -gt $age2
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test $age1 -lt $age2
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test $age1 -ge $age2
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test $age1 -le $age2
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test $age1 -eq $age2
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
测试案例戳这里
[root@yinzhengjie ~]# [ -gt ] && echo "大于" || echo "no"
大于
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# [ -ge ] && echo "大于等于" || echo "no"
大于等于
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# [ -lt ] && echo "小于" || echo "no"
小于
[root@yinzhengjie ~]#
案例展示二
三.bash的字符串测试(字符串的判断)
字符串测试:
= 是否等于
> ascii码是否大于ascii码
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配(注意: 此表达式一般用于[[ ]]中;扩展的正则表达式)
-z "STRING“ 字符串是否为空,空为真,不空为假
-n "STRING“ 字符串是否不空,不空为真,空为假 注意:用于字符串比较时的用到的操作数都应该使用引号
[root@node101.yinzhengjie.org.cn ~]# name1="Jason Yin"
[root@node101.yinzhengjie.org.cn ~]# name2="yinzhengjie"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# test "$name1" = "$name2"
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test "$name1" > "$name2"
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test "$name1" < "$name2"
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test "$name1" != "$name2"
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# test -z ""
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test -n ""
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# x=
[root@node101.yinzhengjie.org.cn ~]# test $x #测试变量是否存在
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# unset x #删除变量
[root@node101.yinzhengjie.org.cn ~]# test $x
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# test -z $x #测试变量是否是空串
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# x=""
[root@node101.yinzhengjie.org.cn ~]# test $x
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# test -z $x #注意哟,变量删除或者被赋值为空串都为真哟~
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# test -n $x #我们发现若不加引号和咱们逻辑不符合,因为变量x的确是存在且其值为空。
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# test -n "$x" #判断变量是否为不空,应该对变量加引号更加符合逻辑。
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
测试案例戳这里
[root@yinzhengjie ~]# a=yinzhengjie
[root@yinzhengjie ~]# b=yinzhengjie
[root@yinzhengjie ~]# [ "$a" == "$b" ] && echo yes || echo no
yes
[root@yinzhengjie ~]# [ "$a" == yinzhengjie ] && echo yes || echo no
yes
[root@yinzhengjie ~]# [ "$a" == hello ] && echo yes || echo no
no
[root@yinzhengjie ~]#
案例展示二
四.Bash的文件测试(按照文件类型进行判断)
玩Linux的运维童鞋都应该知道"Linux一切皆文件",我们大致将这些文件件分为七类:"块设备文件,字符设备文件,目录文件,普通文件,链接文件,管道文件,套接字文件"。 存在性测试
-a FILE:同 -e
-e FILE: 文件存在性测试,存在为真,否则为假 存在性及类别测试
-b FILE:是否存在且为块设备文件
-c FILE:是否存在且为字符设备文件
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-h FILE 或 -L FILE:存在且为符号链接文件
-p FILE:是否存在且为命名管道文件
-S FILE:是否存在且为套接字文件
[root@node101.yinzhengjie.org.cn ~]# cat shell/rm.sh #编写rm.sh测试脚本案例
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: rm.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** #导入其它脚本中的变量,在当前脚本就不用重复定义了,直接调用被调用者的变量即可
. /root/shell/vars [ -n "$1" ] || { echo "Usage: rm.sh file ..."; exit ;}
DESTDIR=/tmp/`date +%F_%T`
[ -a "$1" ] || { echo "$1 is not exist ..."; exit ;}
mkdir $DESTDIR
[ ! -d "$DESTDIR" ] && { "$DESTDIR is not directory";exit ;}
mv $* $DESTDIR
echo -e "$COLOR$* is moved to $DESTDIR$COLOEREND"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll shell/rm.sh
-rwxr-xr-x root root Nov : shell/rm.sh
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# alias rm=/root/shell/rm.sh
[root@node101.yinzhengjie.org.cn ~]# rm /data/test.log
/data/test.log is moved to /tmp/--22_05::
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rm
Usage: rm.sh file ...
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rm xxx
xxx is not exist ...
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat shell/rm.sh #编写rm.sh测试脚本案例
[root@yinzhengjie ~]# test -e /etc/fstab
[root@yinzhengjie ~]# echo $? [root@yinzhengjie ~]# [ -e /etc/fstab ]
[root@yinzhengjie ~]# echo $? [root@yinzhengjie ~]
[root@yinzhengjie ~]# test -d /root/ && echo "yes" || echo "no"
yes
[root@yinzhengjie ~]# [ -d /root/ ] && echo "yes" || echo "no"
yes
[root@yinzhengjie ~]#
测试案例戳这里
五.Bash的文件权限测试(按照文件权限进行判断)
文件权限测试:
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行 文件特殊权限测试:
-u FILE:是否存在且拥有suid权限
-g FILE:是否存在且拥有sgid权限
-k FILE:是否存在且拥有sticky权限
[root@node101.yinzhengjie.org.cn ~/shell]# ll
total
-rw-r--r-- root root Nov : arg.sh
-rwxr-xr-x root root Nov : backup_etc.sh
-rwxr-xr-x root root Nov : father.sh
-rwxr-xr-x root root Nov : rm.sh
-rwxr-xr-x root root Nov : son.sh
-rw-r--r-- root root Nov : test.sh
-rw-r--r-- root root Nov : vars
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# FILE=arg.sh
[root@node101.yinzhengjie.org.cn ~/shell]# [[ $FILE =~ \.sh$ ]] && [ ! -x $FILE ] && chmod +x $FILE
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# ll
total
-rwxr-xr-x root root Nov : arg.sh #果真加上了执行权限
-rwxr-xr-x root root Nov : backup_etc.sh
-rwxr-xr-x root root Nov : father.sh
-rwxr-xr-x root root Nov : rm.sh
-rwxr-xr-x root root Nov : son.sh
-rw-r--r-- root root Nov : test.sh
-rw-r--r-- root root Nov : vars
[root@node101.yinzhengjie.org.cn ~/shell]#
测试案例戳这里
[root@yinzhengjie ~]# test -w yinzhengjie.txt && echo "yes" || echo "no"
yes
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# [ -w /root/yinzhengjie.txt ] && echo yes || echo no
yes
[root@yinzhengjie ~]#
测试案例二
六.Bash的文件属性测试(两个文件之间进行比较)
文件大小测试:
-s FILE: 是否存在且非空 文件是否打开:
-t fd: fd 文件描述符是否在某终端已经打开
-N FILE:文件自从上一次被读取之后是否被修改过
-O FILE:当前有效用户是否为文件属主
-G FILE:当前有效用户是否为文件属组 双目测试:
FILE1 -ef FILE2: FILE1是否是FILE2的硬链接
FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)
FILE1 -ot FILE2: FILE1是否旧于FILE2
[root@node101.yinzhengjie.org.cn ~/shell]# ll -i
total
-rwxr-xr-x root root Nov : arg2.sh
-rwxr-xr-x root root Nov : arg.sh
-rwxr-xr-x root root Nov : backup_etc.sh
-rwxr-xr-x root root Nov : father.sh
-rwxr-xr-x root root Nov : rm.sh
-rwxr-xr-x root root Nov : son.sh
-rw-r--r-- root root Nov : test.sh
-rw-r--r-- root root Nov : vars
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# FILE=arg.sh
[root@node101.yinzhengjie.org.cn ~/shell]# [ -t $FILE ] || echo "$FILE is open"
arg.sh is open
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# [ arg2.sh -ef arg.sh ]
[root@node101.yinzhengjie.org.cn ~/shell]# echo $? [root@node101.yinzhengjie.org.cn ~/shell]#
测试案例戳这里
[root@yinzhengjie ~]# ln /root/yinzhengjie.txt /tmp/test.txt
[root@yinzhengjie ~]# ll -i /root/yinzhengjie.txt
-rw-r--r-- root root Oct : /root/yinzhengjie.txt
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# ll -i /tmp/test.txt
-rw-r--r-- root root Oct : /tmp/test.txt
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# [ /root/yinzhengjie.txt -ef /tmp/test.txt ] && echo "是硬链接" || echo "不是同一个文件"是硬链接
[root@yinzhengjie ~]#
案例展示二
七.Bash的组合测试条件
第一种方式:
[ EXPRESSION1 -a EXPRESSION2 ] 并且
[ EXPRESSION1 -o EXPRESSION2 ] 或者
[ ! EXPRESSION ] 取反
-a 和 -o 需要使用测试命令进行,[[ ]] 不支持 第二种方式:
COMMAND1 && COMMAND2 并且,短路与,代表条件性的AND THEN
COMMAND1 || COMMAND2 或者,短路或,代表条件性的OR ELSE
! COMMAND 非
示例:
[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]
[root@node101.yinzhengjie.org.cn ~]# x=
[root@node101.yinzhengjie.org.cn ~]# y=
[root@node101.yinzhengjie.org.cn ~]# [ $x -gt $y ]
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]# [ $x -lt $y ]
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# [ $x -lt $y ] && echo "x < y"
[root@node101.yinzhengjie.org.cn ~]# [ $x -gt $y ] && echo "x > y"
x > y
[root@node101.yinzhengjie.org.cn ~]# [ $x -lt $y ] && echo "x < y" || echo "x >= y"
x >= y
[root@node101.yinzhengjie.org.cn ~]# x=
[root@node101.yinzhengjie.org.cn ~]# y=
[root@node101.yinzhengjie.org.cn ~]# [ $x -lt $y ] && echo "x < y" || echo "x >= y"
x < y
[root@node101.yinzhengjie.org.cn ~]#
测试案例戳这里
[root@yinzhengjie ~]# a=
[root@yinzhengjie ~]# [ -n "$a" -a "$a" -gt ]&& echo yes || echo no
yes
[root@yinzhengjie ~]# a=
[root@yinzhengjie ~]# [ -n "$a" -a "$a" -gt ]&& echo yes || echo no
no
[root@yinzhengjie ~]#
案例展示二
八.小括号"()"和花括号"{}"的区别
"()":
在小括号执行的指令,变量赋值和内置变量只影响小括号内的指令,而不会影响小括号外的指令。
只是对一串命令重新开一个子shell进行执行
最后一个命令可以不用分号 "{}":
一串命令在当前shell执行
最后一个命令要用分号
第一个命令和左括号之间必须要有一个空格 更详细说明可参考:man bash。
[root@node101.yinzhengjie.org.cn ~]# NAME=jason;(NAME="Jason Yin";echo $NAME);echo $NAME
Jason Yin
jason
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# NAME=jason;{ NAME="Jason Yin";echo $NAME;};echo $NAME
Jason Yin
Jason Yin
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# umask [root@node101.yinzhengjie.org.cn ~]# (umask ;touch /data/test.log)
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# touch /data/test2.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /data/test*
-rw-r--r-- root root Nov : /data/test2.log
-rw------- root root Nov : /data/test.log
[root@node101.yinzhengjie.org.cn ~]#
测试案例戳这里
九.小试牛刀
1>.编写脚本 argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数
2>.写脚本 hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”
[root@node101.yinzhengjie.org.cn ~]# ip=127.0.0.1
[root@node101.yinzhengjie.org.cn ~]# [[ "$ip" =~ ^(([-]?[-]|[-]{}|[-][-]|[-])\.){}([-]?[-]|[-]{}|[-][-]|[-])$ ]]&& echo true || echo false #这是一个判断IP的方法。
true
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ip=127.0.0.111111
[root@node101.yinzhengjie.org.cn ~]# [[ "$ip" =~ ^(([-]?[-]|[-]{}|[-][-]|[-])\.){}([-]?[-]|[-]{}|[-][-]|[-])$ ]]&& echo true || echo false
false
[root@node101.yinzhengjie.org.cn ~]#
3>.编写脚本 checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
4>.写脚本 per.sh,判断当前用户对指定参数文件,是否不可读并且不可写
5>.编写脚本 excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件
6>.编写脚本 nologin.sh和 login.sh,实现禁止和允许普通用户登录系统
[root@node101.yinzhengjie.org.cn ~]# touch /etc/nologin #创建出改文件就可以实现禁止普通用户登录了,只要删除该文件就又允许普通用户登录啦~
SHELL脚本编程的条件测试的更多相关文章
- shell脚本进阶之条件测试与条件语句
接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识. shell脚本进阶之条件测试 在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程.t ...
- shell脚本编程之条件判断
条件测试类型: 整数测试 字符测试 文件测试 条件测试的表达式的三种方法: 1.[ expression ] 命令测试 2.[[ expression ]] 关键字测试 3.test expressi ...
- shell脚本中的条件测试if中的-z到-d的意思
文件表达式 if [ -f file ] 如果文件存在if [ -d ... ] 如果目录存在if [ -s file ] 如果文件存在且非空 if [ -r file ] ...
- Linux Shell脚本编程case条件语句
1,判断一个数字是否则在1,2,3之中. #!/bin/bash read -p "pls input a number:" n case "$n" in ) ...
- 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本
一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...
- linux基础—课堂随笔_03 SHELL脚本编程基础
shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...
- shell脚本编程(一) 变量、条件判断、循环
目录 1. shell脚本编程 2. 运行 Shell 脚本有两种方法 3. 变量 4. 本地变量 5. 环境变量 6. 参数变量 7. 多行注释 8. if条件判断 ...
- 亿能测试大讲堂 - YY在线课程[ 测试人员需要掌握的Shell脚本编程 ]
亿能测试大讲堂 - YY在线课程[ 测试人员需要掌握的Shell脚本编程 ]http://automationqa.com/forum.php?mod=viewthread&tid=2453& ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
随机推荐
- Sql server 中将数据行转列列转行(二)
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...
- MUD游戏开发教程视频
MUD游戏开发教程视频 https://space.bilibili.com/476328540/channel/detail?cid=91187
- [LeetCode] 293. Flip Game 翻转游戏
You are playing the following Flip Game with your friend: Given a string that contains only these tw ...
- [LeetCode] 543. Diameter of Binary Tree 二叉树的直径
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...
- 一文读懂ZooKeeper (转)
什么是ZooKeeper ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务.ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集 ...
- 【网络开发】详谈socket请求Web服务器过程
最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有"连接建立"的发生 ...
- 史上最详细bitbucket入门手册,手把手操作指南
老大要我去调研一下有什么好用的免费软件版本管理工具,有利于小团队开发的.我第一个想到的就是git,经常在git下东西,听说它的代码仓库好用,于是就注册了一个github的账号,创建仓库的时候才发现只能 ...
- mysql中数据表记录的增删查改(2)
select `数据表.字段1`, group_concat(`数据表.字段2`) from `数据表` group by `数据表.字段1` order by `数据表.字段1` desc; sel ...
- Redis学习笔记(一)— 基本命令和数据类型
MacOs环境 Redis基本命令 启动服务:redis-server 连接服务:redis-cli -h 指定主机/IP -p 指定端口 -a 指定密码 关闭服务:先shutdown 保存数据并关闭 ...
- git 学习笔记 ---远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的, ...