shell循环:for,while,until
shell分支判断:if,case语句(shell条件判断语句)
一,for循环语句
#!/bin/bash
for file in $(ls /tmp/test/mytest |grep sh) //for in格式是shell for的基本格式,根js的for in类似
do //循环开始你就把它当成{
echo $file
done //循环结束你就把它当成}
for ((i=0;i<10;i++)) //注意是双小括号,由于受其他语言的影响,很容易搞错
do
echo -n $i
done
echo //输出换行
for i in 0 1 2 3 4 5 6 7 8 9
do
echo -n $i
done
echo
for i in "0 1 2 3 4 5 6 7 8 9" //这个循环只循环了一次,双引号里面只是一个变量
do
echo -n $i
done
exit 0
二,while循环语句
#!/bin/bash
i=0
while ((i<10))
do
echo $i
((i += 1))
done
i=0
while [ $i -lt 10 ] //注意括号内侧二边的空格
do
echo $i
let "i+=1" //加1
done
exit 0
三,until循环语句
#!/bin/bash
END_CONDITION=end
until [ "$var1" = "$END_CONDITION" ] //读取的变量根设定的变量相等时退出循环,不然永远循环
do
echo "Input variable #1 "
echo "($END_CONDITION to exit)"
read var1
echo "variable #1 = $var1"
echo
done
exit 0
#!/bin/bash
echo "Input a number #1 "
read num
echo "variable #1 = $num"
if [ $num -lt 60 ] //注意lt前面的-,很容易忘的
then
echo "you are not pass"
elif [ $num -lt 70 ] && [ $num -ge 60 ] //多个条件的判断
then
echo "pass"
elif [[ $num -lt 85 && $num -ge 70 ]] //如果放在一起,要注意是双方括号,不要写成[ $num -lt 85 && $num -ge 70 ]
then
echo "good"
elif (( $num <= 100 )) && (( $num >= 85 )) //对于有语言基础的人来说,这种写法让人觉得很舒服,不要忘了是双小括号
then
echo "very good"
else
echo "num is wrong"
fi //if要有结束标签的,根XML很像,不闭合,就报错
exit 0
五,shell case语句
#!/bin/sh
case $1 in
start)
echo "start ok"
;;//注意一点,要注意是双分号
stop)
echo "stop ok"
;;
restart)
echo "restart ok"
;;
*)
echo "no param"
;;
esac //注意闭合标签
exit 0
[root@krlcgcms01 forif]# sh c1.sh stop
stop ok
bash shell if 命令参数说明
想写一个数字大小比较,借助下面的参考,原来是这样的(mingw下通过):
shell条件语句
Bash脚本中使用条件,包含以下几个话题:
if 语句
使用命令的退出状态
比较和测试输入和文件
if/then/else 结构
if/then/elif/else 结构
使用和测试位置参数
嵌套 if 语句
布尔表达式
使用 case 语句
7.1. 介绍if
7.1.1. 概要
指定shell脚本中的依靠命令的成功与否来实施不同过程的行为。 if 结构允许你来指定这样的条件。
最精简的 if 命令的语法是:
if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi
TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUENT-COMMANDS 就执行。返回状态是最后一个命令的退出状态,或者当没有条件是真的话为0。
TEST-COMMAND 经常包括数字和字符串的比较测试,但是也可以是任何在成功时返回状态0或者失败时返回一些其他状态的一些命令。一元表达式经常用于检查文件的状态。如果对某个要素primaries, FILE 参数是 /dev/fd/N 这样的形式,那么就检查文件描述符 “N”。stdin, stdout 和 stderr 和他们各自的文件描述符也可以用于测试。
7.1.1.1. 和if使用的表达式
下表包含了一个组成 TEST-COMMAND 命令或者命令列表,称作 “要素primaries” 的概览。这些primaries放置在方括号中来表示一个条件表达式的测试。
表 7.1. 主表达式
Primary 意义
表 7.2. 组合表达式
操作 效果
[ ! EXPR ] 如果 EXPR 是false则为真。
[ ( EXPR ) ] 返回 EXPR的值。这样可以用来忽略正常的操作符优先级。
[ EXPR1 -a EXPR2 ] 如果 EXPR1 and EXPR2 全真则为真。
[ EXPR1 -o EXPR2 ] 如果 EXPR1 或者 EXPR2 为真则为真。
[ (或作 test) 内建命令对条件表达式使用一系列基于参数数量的规则来求值。更多关于这个主题的信息可以在Bash文档中查找。就像if 使用fi 来结束一样,在条件列完之后必须用">"来结束。
7.1.1.2. 后接then语句的命令
CONSEQUENT-COMMANDS 列出了跟在 then 语句后面可以是任何有效的UNIX命令,任何可执行的程序,任何可执行的shell脚本或者任何shell语句,除了 fi. 。重要地记住 then 和 fi 在shell里面被认为是分开的语句。因此,在命令行上使用的时候,他们用分号隔开。
在脚本中,if语句的不同部分通常是良好分隔的。以下是一些简单的例子:
7.1.1.3. 检查文件
第一个例子检查一个文件是否存在:
7.1.1.4. 检查shell选项
加入到Bash配置文件中去:
环境
以上例子将在命令行输入后开始工作:
然而,如果使用依赖环境的测试,当在脚本中输入相同的命令你可能得到不用的结果,因为脚本会打开一个新的,没有设置预期的变量和选项的shell。
7.1.2. if的简单应用
7.1.2.1. 测试退出状态
变量包含了之前执行命令的退出状态(最近完成的前台进程)。
测试:
以下例子证明了 TEST-COMMANDS 可以是任何有返回和退出状态的UNIX命令,之后 if 再次返回零的退出状态:
以下得到同样的结果:
7.1.2.2. 数字的比较
数值比较:
这个脚本在每个星期天由cron来执行。
如果星期的数是偶数,他就提醒你把垃圾箱清理:
7.1.2.3. 字符串比较
一个通过比较字符串来测试用户ID的例子:
使用Bash,你可以缩短这样的结构。下面是以上测试的精简结构:
[ "$(whoami)" != 'root' ] && ( echo you are using a non-privileged account; exit 1 )
类似于如果测试为真就执行的 “&&” 表达式, “||” 指定了测试为假就执行。类似于 “&&” 表达式指明了在两个测试条件为真时所采取的动作,“||” 指明测试为假时所采取的行动。
正则表达式也可以在比较中使用:
真正的程序员
多数程序员更喜欢使用和方括号相同作用的内建的 test 命令,像这样:
test "$(whoami)" != 'root' && (echo you are using a non-privileged account; exit 1)
参见信息页面得到更多关于Bash “(( EXPRESSION ))” 和 “[[ EXPRESSION ]]” 结构的模块匹配信息。
shell if 命令参数说明
比较字符写法: