linux shell 脚本入门学习(二流程控制)
Posted 胖鹅68
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell 脚本入门学习(二流程控制)相关的知识,希望对你有一定的参考价值。
一、if 条件控制
语法
if … fi 语法
if condition
then
command1
command2
...
commandN
fi
if和then写在同一行时,需要分号分隔。(等价于)
if condition; then
command1
command2
...
commandN
fi
if else
if condition
then
command1
command2
...
commandN
else
command
fi
if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
if 语法规则说明
- if结构也可以写成单行
$ if true; then echo 'hello world'; fi
- if关键字后面也可以是一条命令,该条命令执行成功(返回值0),就意味着判断条件成立。
$ if echo 'hi'; then echo 'hello world'; fi
hi
hello world
- if后面可以跟任意数量的命令。这时,所有命令都会执行,但是判断真伪只看最后一个命令,即使前面所有命令都失败,只要最后一个命令返回0,就会执行then的部分。
$ if false; true; then echo 'hello world'; fi
hello world
if结构的判断条件,一般使用test命令,有三种形式
这个表达式为真,test命令执行成功(返回值为0);表达式为伪,test命令执行失败(返回值为1)
写法一 test expression
if test -e /tmp/foo.txt ; then
echo "Found foo.txt"
fi
写法二 [ expression ]
if [ -e /tmp/foo.txt ] ; then
echo "Found foo.txt"
fi
[ 和 ]与内部的表达式之间必须有空格
写法三 [[ expression ]]
if [[ -e /tmp/foo.txt ]] ; then
echo "Found foo.txt"
fi
[ 和 ]与内部的表达式之间必须有空格
test 命令用于检查某个条件是否成立
数值测试
#!/bin/bash
num1=100
num2=100
#if test $[num1] -eq $[num2]
# 等价于
if test $num1 -eq $num2
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
字符串测试
num1="W3Cschool"
num2="W3Cschool"
if test num1=num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
文件测试
语法:
-e 文件名
如果文件存在则为真
-r 文件名
如果文件存在且可读则为真
-w 文件名
如果文件存在且可写则为真
-x 文件名
如果文件存在且可执行则为真
-s 文件名
如果文件存在且至少有一个字符则为真
-d 文件名
如果文件存在且为目录则为真
-f 文件名
如果文件存在且为普通文件则为真
-c 文件名
如果文件存在且为字符型特殊文件则为真
-b 文件名
如果文件存在且为块特殊文件则为真
########### 文件测试
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
正则判断
[[ string1 =~ regex ]]
regex是一个正则表示式,=~是正则比较运算符
#!/bin/bash
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
echo "INT is an integer."
exit 0
else
echo "INT is not an integer." >&2
exit 1
fi
test 判断的逻辑运算
- AND运算:符号&&,也可使用参数-a。
if [ condition ] && [ condition ]; then
command
fi
- OR运算:符号||,也可使用参数-o。
- NOT运算:符号!。
#!/bin/bash
MIN_VAL=1
MAX_VAL=100
INT=50
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
if [[ $INT -ge $MIN_VAL && $INT -le $MAX_VAL ]]; then
echo "$INT is within $MIN_VAL to $MAX_VAL."
else
echo "$INT is out of range."
fi
else
echo "INT is not an integer." >&2
exit 1
fi
算术判断
((…)) 作为算术条件,进行算术运算的判断
if ((3 > 2)); then
echo "true"
fi
注意
- 算术判断不需要使用test命令,而是直接使用((…))结构
- 如果算术计算的结果是非零值,则表示判断成立。这一点跟命令的返回值正好相反
$ if ((1)); then echo "It is true."; fi
It is true.
$ if ((0)); then echo "It is true."; else echo "it is false."; fi
It is false.
普通命令的逻辑运算
-
$ command1 && command2
先执行command1,只有command1执行成功后, 才会执行command2。 -
$ command1 || command2
先执行command1,只有command1执行失败后, 才会执行command2
二、循环
for循环
语法
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
in列表可以包含替换 数字、字符串和文件名。
案例说明
- in 是字符串
for str in 'This is a string'
do
echo $str
done
- in 是数字
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
while 循环
while condition
do
command
done
无线循环
while :
do
command
done
while true
do
command
done
for (( ; ; ))
until 循环
循环至少执行一次
until condition
do
command
done
跳出循环
break
break命令允许跳出所有循环(终止执行后面的所有循环)。
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done
continue
它不会跳出所有循环,仅仅跳出当前循环
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
三、case
语法
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
esac(就是case反过来)作为结束标记
注意事项:
- 取值后面必须为单词in
- 每一模式必须以右括号结束
- 取值可以为变量或常数
- 匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
匹配规则
- a):匹配a。
#!/bin/bash
echo -n "输入一个1到3之间的数字(包含两端)> "
read character
case $character in
1 ) echo 1
;;
2 ) echo 2
;;
3 ) echo 3
;;
* ) echo 输入不符合要求
esac
- a|b):匹配a或b。
- [[:alpha:]]):匹配单个字母。
- ???):匹配3个字符的单词。
- *.txt):匹配.txt结尾。
- *):匹配任意输入,通过作为case结构的最后一个模式。
四、思维导图下载
以上是关于linux shell 脚本入门学习(二流程控制)的主要内容,如果未能解决你的问题,请参考以下文章