shell脚本1——分支结构、循环、函数

来源:互联网 发布:php打卡考勤系统源码 编辑:程序博客网 时间:2024/05/17 04:30

重要的写在前头
因为linux的shell中默认是字符串,所以 sum=1+2,如果传入的参数为两个数字 1 4,这个它返回的是1+4,并不是5,若要让它显示的是5的话,有如下方法:
1、 sum=[1+2]2letsum=1+$2

一、if语句
1、字符串判断
str1 = str2      当两个串有相同内容、长度时为真
str1 != str2      当串str1和str2不等时为真
-n str1        当串的长度大于0时为真(串非空)
-z str1        当串的长度为0时为真(空串)
str1         当串str1为非空时为真

2、数字的判断
int1 -eq int2    两数相等为真
int1 -ne int2    两数不等为真
int1 -gt int2    int1大于int2为真
int1 -ge int2    int1大于等于int2为真
int1 -lt int2    int1小于int2为真
int1 -le int2    int1小于等于int2为真
3 文件的判断
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真
3、复杂逻辑判断
-a         与
-o        或
!        非

例子

  1 #!/bin/bash  2  3 sum=5  4  5 if [ $sum -eq 5 ];  6 then  7 echo "sum is $sum"  8 else  9 echo "sum is not 5" 10 fi

在测试中,发现有时候提示 ./test.sh: 第 5 行: [: -eq: 期待一元表达式
当出现这个时,不一定是语法问题,有可能是程序运行的问题
解决方案:重新再创建一个.sh文件,重新运行看看

二、case 语句

case $var(变量) in
a) echo XXX
;;
b) echo XXX
;;
*) echo XXX
;;
esac

 12 case  $sum in 13     5) echo "sum is $sum" 14     ;; 15     *) echo "sum is not 5" 16     ;; 17     esac 18

三、级联符号
&& 前面为真时 ||前面为假时

四、循环语句
for in
for $var in {1..100} do
/语句/
done
例子:

20 for I in {1..100};do 21 if [ $[$I%3] -eq 0 ];then 22 let  xum+=$I 23  fi 24  done 25  echo "the sum is:$xum"

while
while [ /条件为真/ ]
do
/语句/
&&break 有条件停下
done

 var1=1 28 xum=0 29  while [ $var1 -lt 100 ]  #var < 100  条件为真 30  do 31     let xum+=$var1 32     let var1+=1 33    #[ $var1 -eq 100 ]&&break;   #var=100 34  done 35 echo "sum is $xum"

until
until [ /条件为假/ ]
do
/语句/
&&break 有条件停下
done

  var2=1 38 xum=0 39  until [ ! $var2 -lt 100 ]  #var < 100   条件为假 40  do 41     let xum+=$var2 42     let var2+=1 43     #[ $var2 -eq 100 ]&&break;   #var=100 44  done 45  echo "sum is $xum"

五、shell函数

  1 #!/bin/bash  2  3 hello()  4 {  5     echo " $1, Hello World"//原来这里的$1不是从外传进来的参数,单单是函数名传进来的参数  6 }  7  8 hello  你好

六、shell变量替换
临时赋值
var:xxxvarxxx{var:+xxx} 如果var已被设置(里面有值),则强制设置为xxx

永久赋值
var:=xxxvarxxx{var:?string} 如果var未被设置,则将输出错误信息string

替换
var/xx/yyvarxxyy{var//xx/yy} 将var里面的所以的xx替换成yy

0 0
原创粉丝点击