一、read的使用
1)从输入中读取n个字符并存入变量
[lirong@lr ~]# read -n 2 var
LR[lirong@lr ~]# echo $var
LR
2)用无回显的方式读取密码
[lirong@lr ~]# read -s var
[lirong@lr ~]# echo $var
lr
3)显示提示信息
[lirong@lr ~]# read -p "Enter input:" var
Enter input:user
[lirong@lr ~]# echo $var
user
4)在特定时限内读取输入
$ read -t 2 var
#在2秒内将键入的字符串读入变量var
5)用特定的定界符作为输入行的结束
read -d delim_char var
例如:
[lirong@lr ~]# read -d ";" var
hello;[lirong@lr ~]# echo $var
hello #var 被设置为 hello
二、循环
1)for循环
for var in list;
do
commands; #使用变量$var
done
list可以是一个字符串,也可以是一个序列
example:
for i in {1..3}
do
echo $i
done
[lirong@lr ~/work_lr/mygit/shell]# sh for.sh
1
2
3
for((i=1;i<4;i++))
{
echo $i
}
[lirong@lr ~/work_lr/mygit/shell]# sh for.sh
1
2
3
2)while循环
while condition
do
commands;
done
用true作为循环条件能够产生无限循环
3)until循环
在bash中还可以使用一个特殊的循环until。它会一直执行循环,直到给定的条件为真。
x=0;
until [ $x -eq 9 ]; #条件是[$x -eq 9 ]
do
let x++; echo $x;
done
三、比较
1)if条件
if condition;
then
commands;
fi
2)else if和else
if condition;
then
commands;
else if condition; then
commands;
else
commands;
fi
if 和 else 语句可以进行嵌套。 if 的条件判断部分可能会变得很长,但可以用逻辑运算符将它变得简洁一些:
[ condition ] && action; # 如果 condition 为真,则执行 action ;
[ condition ] || action; # 如果 condition 为假,则执行 action 。
&& 是逻辑与运算符, || 是逻辑或运算符。编写Bash脚本时,这是一个很有用的技巧。
3)算术比较
条件通常被放置在封闭的中括号内。一定要注意在 [ 或 ] 与操作数之间有一个空格。如果忘记了这个空格,脚本就会报错。
[ $var -eq 0 ] #当 $var 等于 0 时,返回真
[ $var -ne 0 ] #当 $var 为非 0 时,返回真
其他重要的操作符如下所示。
-gt :大于。
-lt :小于。
-ge :大于或等于。
-le :小于或等于。
可以按照下面的方法结合多个条件进行测试:
[ $var1 -ne 0 -a $var2 -gt 2 ] #使用逻辑与-a
[ $var1 -ne 0 -o var2 -gt 2 ] #逻辑或 -o
4)文件系统相关测试
我们可以使用不同的条件标志测试不同的文件系统相关的属性。
[ -f $file_var ] :如果给定的变量包含正常的文件路径或文件名,则返回真。
[ -x $var ] :如果给定的变量包含的文件可执行,则返回真。
[ -d $var ] :如果给定的变量包含的是目录,则返回真。
[ -e $var ] :如果给定的变量包含的文件存在,则返回真。
[ -c $var ] :如果给定的变量包含的是一个字符设备文件的路径,则返回真。
[ -b $var ] :如果给定的变量包含的是一个块设备文件的路径,则返回真。
[ -w $var ] :如果给定的变量包含的文件可写,则返回真。
[ -r $var ] :如果给定的变量包含的文件可读,则返回真。
[ -L $var ] :如果给定的变量包含的是一个符号链接,则返回真。
fpath="/etc/passwd"
if [ -e $fpath ]; then
echo File exists;
else
echo Does not exist;
fi
5)字符串比较
使用字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误,所以最好避开它们。
[[ $str1 = $str2 ]] :当 str1 等于 str2 时,返回真。也就是说, str1 和 str2 包含的文本是一模一样的。
[[ $str1 == $str2 ]] :这是检查字符串是否相等的另一种写法。也可以检查两个字符串是否不同。
[[ $str1 != $str2 ]] :如果 str1 和 str2 不相同,则返回真。
我们还可以检查字符串的字母序情况,具体如下所示。
[[ $str1 > $str2 ]] :如果 str1 的字母序比 str2 大,则返回真。
[[ $str1 < $str2 ]] :如果 str1 的字母序比 str2 小,则返回真。
[[ -z $str1 ]] :如果 str1 包含的是空字符串,则返回真。
[[ -n $str1 ]] :如果 str1 包含的是非空字符串,则返回真。
注意在 = 前后各有一个空格。如果忘记加空格,那就不是比较关系了,而变成了赋值语句。
使用逻辑运算符 && 和 || 能够很容易地将多个条件组合起来
if [[ -n $str1 ]] && [[ -z $str2 ]] ;
then
commands;
fi
2017-11-30-LR shell脚本攻略