for循环
常用语法:
#!/bin/bash#1.for循环遍历数组array=(1 2 3)for var in ${array[*]}doecho $vardonefor var in ${array[*]}; do echo $var; done;
注: for命令支持break和continue,语法与其它脚本一致
读取列表中的复杂值
for test in I don't konow if this'll work ; do
echo "word:$test"
done
# 输出
# I
# dont know if thisll
# work
解决方法:
- 转义字符
- 双引号来定义
- 包含空格的数据使用双引号包含
更改字段分隔符
for读取列表进行分隔时根据默认分隔符IFS进行分隔:
- 空格
- 制表符
- 换行符
#设置分隔符为换行符
IFS=$'\n'
#设置多个分隔符
IFS=$'\n':;
注意还原换行符 IFS_OLD=$IFS IFS=$’\n’ do IFS=$IFS_OLD
使用通配符读取目录
for file in /home/rich/test/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
C语言风格的for命令
for (( i=1; i<=10; i++ )); do
echo "$i"
done
for (( a=1, b=10; a<=10; a++, b--)); do
echo "$a - $b"
done
if-then
一般语法:
if command
then
commands
fi
常用语法:
#!/bin/bash
# condition=false
condition=1
if [ $condition == 1 ]
then
echo 1
elif [ $condition == 2 ]
then
echo 2
else
echo 3
fi
解释: 当if语句后面的命令的退出状态码为0(成功运行), 位于then部分的命令会被执行 注意 [ command ]是test命令测试的另一种方法
复合条件测试:
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
高级特性 (( )) [[ ]]
(( expression ))
支持的算术运算如下:
| 符号 | 描述 |
|---|---|
| val++ | |
| val— | |
| ! | 逻辑求反 |
| - | 位求反 |
| ** | 幂运算 |
| << | |
| & | |
| || |
[[ expression ]]
支持高级字符串运算 - 模式匹配
#!/bin/bash
# using pattern matching
#
if [[ $USER == r* ]]
then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
test命令
语法: test condition
于是if命令可以这样写:
if test condition
then
commands
fi
# 等价于
if [ condition ]
then
commands
fi
test命令可以判断三类条件:
- 数值比较
- 字符串比较
- 文件比较
数值比较
语法:
n1 option n2
# option
# -eq n1与n2是否相等
# -ge n1是否大于等于n2
# -gt -le -lt -ne
缺点:
- test不能比较浮点值
字符串比较
| 比较 | 描述 |
|---|---|
| str1 = str2 | str1是否与str2相等 |
| str1 != str2 | str1是否与str2不等 |
| str1 < str2 | str1是否比str2小 |
| str1 > str2 | str1是否比str2大 |
| -n str1 | str1长度是否非0 |
| -z str1 | str1 长度是否为0 |
注意:
和<号必须转义,否则当做重定向
- 大于和小于顺序和sort命令采用不同
- 大写子母小于小写子母, 采用标准ASCII顺序排序
- 未定义的变量的长度为0
case命令
语法:
case variable in
pattern1 | pattern2) command1;;
pattern3) command2;;
*) default command3;;
esac
while命令
while命令是if-then和for的结合. while命令需要测试命令并进行循环处理.
语法:
while test command
do
other commands
done
特点:
- while可以使用多个测试命令, 多个测试命令都会执行, 且最后一个测试命令决定语句是否执行
until命令
while命令的取反
循环的输出
循环的输出可以使用管道或重定向:
for file in /home/rich/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif
echo "$file is a file"
fi
done > output.txt
