循环和比较

一、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;
donetrue作为循环条件能够产生无限循环

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
ifelse 语句可以进行嵌套。 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脚本攻略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值