大数据之Shell编程(二) Shell的基本语法

1.运算符

  • 格式: expr m + n 或 $((m+n)) 注意:运算符之间需要含有空格,否则报错
# 计算(2+3)*4的值
# 方式一:分步计算
>>> S=`expr 2 + 3`
>>> expr $S \* 4

# 方式二:一步完成计算
>>> expr `expr 2 + 3` \* 4
# 或者
>>> $(((2+3)*4))

2.for循环

  • 方式一
for N in 1 2 3
do
    echo $N
done
或
for N in 1 2 3;do echo $N;done
或
for N in {1..3};do echo $N;done
  • 方式二
for((i=0;i<=5;i++))
do
  echo "welcome $i times"
done

3.while循环

while expression
do
command
done

例如:

#!/bin/bash
while [ 2 -gt 1 ]
do
  echo aa
done
i=1
while ((i<=3))
do 
    echo $i
    let i++
done

4.case语句

case $i in
start)
    echo "starting"
    ;;
stop)
    echo "stoping"
    ;;
*)
    echo "Usage:{start|stop}"
esac

5.read命令,等待用户输入

  • read -p (提示语) -n (字符个数) -t (等待时间)
>>> read -p "please input your name:" NAME
>>> echo $NAME

6.if判断

# 语法
if condition
then
    statements
[elif condition
then
     statements...]
[else
    statements...]
fi

例如:

#!/bin/bash
read -p "please input your name:" NAME
if [ $NAME = root ]
then
        echo "hello ${NAME},welcome!"
elif [ $NAME = su ]
then
        echo "hello ${NAME},welcome!"
else
        echo "SB,get out here!"
fi

7.判断语句

  • [ condition ] 注意:condition前后一定要有空格
    非空返回true,可以使用$?来验证(0 为true >=1 为false)
>>> [ hello ]
>>> echo $?
>>> 0
>>> [  ]
>>> echo $?
>>> 1
  • [ condition ] && echo OK || echo NotOk 表示满足条件输出OK 否则返回 NotOk

常用的判断条件
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
判断文件的:
-r 是否有读的权限
-w 是否有写的权限
-x 是否可执行权限
-f 文件是否存在并且是一个常规的文件
-s 文件存在且不为空
-d 文件存在并且是一个目录
-b 文件存在并且是一块设备
-L 文件存在并且是一个链接

>>> [ -f iftest.txt ]
>>> echo $?
>>> 0

8.自定义函数

#语法
[function] funcname [()]
{
    action;
    [reurn int;]
}

# 例如:  function start()  /  start()  / function start   
# 并且返回值只能为int   0~255
# 方法参数可以使用$1 $2...
#!/bin/bash

fSum 3 2;
function fSum()
{
        echo $1,$2;
        return $(($1+$2));
}
total=$?;
echo "第一次获取的结果:" $total

fSum 5 7;
total=$?;
echo "第二次获取的结果:" $total

注意:1 必须在调用之前定义函数,shell是逐行执行
2.函数的返回值只能通过$?来获取,函数可以显示的添加return返回,如果不添加将以最后一条命令运行结果,作为返回值。return的值必须为int 范围为0~255

9.脚本调试

  • sh -xv helloworld.sh
  • 或者在脚本中增加set -x
posted @ 2019-03-07 23:15  新科鲁兹  阅读(178)  评论(0编辑  收藏  举报