hadoop04

算数表达式运算
1、用expr
格式 expr m + n 或$((m+n)) 注意expr运算符间要有空格
例如计算(2+3 )×4 的值
1 .分步计算
赋值:
[root@hadoop2 home]# S=expr 2 + 3
[root@hadoop2 home]# B=expr $S \* 4 ## *号需要转义
[root@hadoop2 home]# echo $B
2.一步完成计算
expr expr 2 + 3 * 4
echo expr \expr 2 + 3` * 4`

2、用(())
((1+2))
(((2+3)*4))
count=1
((count++))
echo c o u n t 报 错 − b a s h : s y n t a x e r r o r n e a r u n e x p e c t e d t o k e n ‘ ( ′ 但 是 要 想 取 到 运 算 结 果 , 需 要 用 count 报错 -bash: syntax error near unexpected token `(' 但是要想取到运算结果,需要用 countbash:syntaxerrornearunexpectedtoken(引用
a=$((1+2))

3、用 [ ] a = [] a= []a=[1+2]
echo $a

4、用let
i=1
let i++

2.5 流程控制
2.5.1 if语法
1、语法格式
if condition
then
statements
[elif condition
then statements. …]
[else
statements ]
fi

2、示例

#!/bin/bash
read -p "please input your name:" NAME   ## read命令用于从控制台读取输入数据
printf '%s\n' $NAME
if [ $NAME = root ]
        then
                echo "hello ${NAME},  welcome !"
        elif [ $NAME = ydhl2]
                then
                        echo "hello ${NAME},  welcome !"
        else
                echo "SB, get out here !"
fi

问题:[root@hdp01 ~]# ./nihao.sh
please inter your name:!huangxiaoming
hello huangxiaoming ,welcom
应该是输出SB, get out here !
原因:
if [ $NAME=root ] =号左右没有空格 $NAME=root默认是输入一个参数,只要这个参数(不包括什么也不输入会报错),就永远都是true,条件永远成立
所以注意=号左右的空格
可以这么写:

#!/bin/bash
read -p "please inter your name:!" NAME
if [ ! -n "$NAME" ]; then echo "please nest time enter your name!"
elif [ $NAME = root ]
        then
                echo "hello $NAME , welcome!"
        elif [ $NAME = xiaoming ]
                then
                        echo "hello $NAME ,welcom"
        else
                echo "sb,get out here!"
fi

3、判断条件
1/ 条件判断基本语法
[ condition ] (注意condition前后要有空格)
#非空返回true
[ edu360 ]
#空返回false
[ ]

注意[ ]内部的=周边的空格,有区别:
[root@shizhan01 scripts]# if [ a = b ];then echo ok;else echo notok;fi
notok
[root@shizhan01 scripts]# if [ a=b ];then echo ok;else echo notok;fi
ok

短路(理解为三元运算符)
[ condition ] && echo OK || echo notok
[root@hadoop2 home]# a=2
[root@hadoop2 home]# b=2
[root@hadoop2 home]# [ $a = $b ] && echo ok || echo notok
条件满足,执行&&后面的语句;条件不满足,执行|| 后面的语句

2/ 条件判断组合
注:[] 与[[ ]] 的区别:[[ ]] 中逻辑组合可以使用 && || 符号
而[] 里面逻辑组合可以用 -a -o
一下a,b,c取值代表的是字母,
[root@mini ~]# if [ a = b && b = c ]; then echo ok;else echo notok;fi
-bash: [: missing `]’
notok

[root@mini ~]# if [ a = b -a b = b ]; then echo ok;else echo notok;fi
notok
[root@mini ~]# if [ a = b -o b = b ]; then echo ok;else echo notok;fi
ok

其中-a是and;-o是or

[root@mini ~]# if [[ a = b && b = b ]]; then echo ok;else echo notok;fi
notok
[root@mini ~]# if [[ a = b || b = b ]]; then echo ok;else echo notok;fi
ok

3/ 常用判断运算符
字符串比较:
= 字符串是否相等
!= 字符串是否不相等
-z 字符串长度为0返回true
-n 字符串长度不为0返回true
if [ ‘aa’ = ‘bb’ ]; then echo ok; else echo notok;fi
if [ -n “aa” ]; then echo ok; else echo notok;fi
if [ -z “” ]; then echo ok; else echo notok;fi

整数比较:
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
还可以用转义的数学符号 <

文件判断:
-d 是否为目录
if [ -d /bin ]; then echo ok; else echo notok;fi
-f 是否为文件
if [ -f /bin/ls ]; then echo ok; else echo notok;fi
-e 是否存在
if [ -e /bin/ls ]; then echo ok; else echo notok;fi

2.5.2 while语法(用的少)
1、方式一
while expression
do
command

done

2、方式二
i=1
while ((i<=3))
do
echo $i
let i++
done

2.5.3 case语法(用的多)
case $1 in
start)
echo “starting”
;;
stop)
echo “stoping”
;;
*)
echo “Usage: {start|stop}”
esac

2.5.4 for语法
1、方式一
for N in 1 2 a
do
echo $N
done

for N in 1 2 3; do echo $N; done

for N in {1…3}; do echo $N; done
2、方式二
for ((i = 0; i <= 5; i++))
do
echo “welcome $i times”
done

for ((i = 0; i <= 5; i++)); do echo “welcome $i times”; done

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值