Shell3 运算符与表达式 流程控制语句

文章目录

    • 一、运算符与表达式:
      • 算术运算符:
      • 算术表达式:
      • 条件运算符:
      • 条件表达式:
      • 逻辑运算符:
    • 二、流程控制:
      • if
      • case
      • 普通for
      • 增强for
      • while

一、运算符与表达式:

算术运算符:

+, - , *, /, % 加,减,乘,除,取余

算术表达式:

方式一:变量=$[运算式]echo 变量;或者$((运算式))
方式二:expr 3 - 2 注:expr运算符两侧要有空格;且乘法为\*
注:一般会选择方式一 $[运算式]

A=$[1+2]
echo A

条件运算符:

1 两个整数之间比较 = 字符串比较:
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)

2 按照文件权限进行判断:
-r 有读的权限(read) -w 有写的权限(write) -x 有执行的权限(execute)

3 按照文件类型进行判断:
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并是一个目录(directory)

条件表达式:

[ condition ] 注:condition前后要有空格,且条件非空为true,空为false。
用于条件语句、循环语句。

[ 1 -gt 2 ] #执行失败
echo $? #查询上一条语句的执行状态,执行成功返回0,执行失败返回失败码

逻辑运算符:

&& || 和java中的含义相同

二、流程控制:

if

基本语法:

if [ 条件判断式 ] 
then 
	程序 
elif [ 条件表达式 ]
then
	程序
else
	程序
fi

注:if后要有空格condition前后要有空格
例子:输入参数$1为1输出hello,为2输出bye。

!/bin/bash
if [ $1 -eq "1" ]
then
        echo "hello"
elif [ $1 -eq "2" ]
then
        echo "bye"
fi

执行:执行:sh case1.sh 1``

case

基本语法:

case $变量名 in 
"值1") 
    如果变量的值等于值1,则执行程序1 
;; 
"值2") 
    如果变量的值等于值2,则执行程序2 
;; 
  …省略其他分支… 
*)
    如果变量的值都不是以上的值,则执行此程序 
;; 
esac

注:;;相当于break; ,*表示其它值相当于default。
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
例子:输入参数$1为1输出hello,为2输出bye,为其他值输出"i don’t know"。

case $1 in
"1")
        echo "hello"
;;
"2")
        echo "bye"
;;
*)
        echo "i don't know"
;;
esac

执行:sh case2.sh 1

普通for

基本语法:

for ((初始值;循环控制条件;变量变化)) 
do 
   程序 
done

例子:从1加到100

#!/bin/bash
s=0
for(( i=1;i<=100;i++ ))
do
        s=$[$s+$i]
done
echo $s

增强for

基本语法:

for 变量 in 值1 值2 值3… 
do 
	程序 
done

例子:打印所有输入参数

for i in "$@"
do
        echo $i
done

注:
$ * 和 $ @都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$ 1 $ 2 … $n的形式输出所有参数,每次输出换行。
当它们被双引号“”包含时,“ $* ”会将所有的参数作为一个整体,以“$1 $2 … $n”的形式输出所有参数;“ $@”会将各个参数分开,以“$1” “$2”… ” $n”的形式输出所有参数。

while

基本语法:

while [ 条件判断式 ] 
do 
    程序
done

注:while 和 [ 条件表达式 ]之间有空格,条件判断式与中括号之间也有空格。
例子:从1加到100

s2=0
j=1
while [ $j -le 100 ]
do
        s2=$[$s2+$j]
        j=$[$j+1]
done
echo $s2

注:vim比vi编辑器可读性好

你可能感兴趣的:(#,shell,linux,Shell)