【shell 判断循环语句 02】

一、流程控制

1、if判断

1.基本语法
if [ 条件判断式 ];then 
  程序 
fi 
或者 
if [ 条件判断式 ] 
  then 
    程序 
fi

注意:

if后面要有空格

条件判断语句和中括号之间要有空格

举例:输入一个数字,如果是1,返回“testing...” 如果是2,返回“TESTING...” 如果是3,不返回结果

[root@localhost data]# cat if.sh 
#!/bin/bash

if [ $1 -eq "1" ]
then
    echo "testing..."
elif [ $1 -eq "2" ]
then
    echo "TESTING..."
fi
[root@localhost data]# sh if.sh 1
testing...
[root@localhost data]# sh if.sh 2
TESTING...
[root@localhost data]# sh if.sh 3

备注:$1 -eq "1"   -->  $1:第一个数字,-eq:判断是否相等

2、case语句

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

注意:

1)case行尾必须为单词“in”,每一个模式匹配必须已右括号结束

2);; 表示命令结束,相当于Java的break

3)最后的 *) 表示默认模式,相当于Java中的default

举例:输入数字1,返回“zly” 输入2,返回“cjk” 输入3,返回“mxt”

[root@localhost data]# cat case.sh 
#!/bin/bash

case $1 in
"1")
    echo "zly"
;;
"2")
    echo "cjk"
;;
*)
    echo "mxt"
;;
esac
    

[root@localhost data]# sh case.sh 1
zly
[root@localhost data]# sh case.sh 2
cjk
[root@localhost data]# sh case.sh 4
mxt
[root@localhost data]# 

3、for循环

基本语法1:

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

注意:for后面是双层小括号; do...done相当于Java的{}

举例:1~100的和

[root@localhost data]# cat for.sh 
#!/bin/bash

sum=0
for((i=0;i<=100;i++))
do
    sum=$[ $sum+$i ]
done

echo $sum
[root@localhost data]# sh for.sh 
5050

基本语法2:

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

举例:打印所有输入的参数

[root@localhost data]# cat for.sh 
#!/bin/bash

sum=0
for((i=0;i<=100;i++))
do
    sum=$[ $sum+$i ]
done

echo $sum

for i in "$*"
do
    echo "zly $i"
done

for i in "$@"
do
    echo "ym $i"
done
    
[root@localhost data]# sh for.sh cls xz bd
5050
zly cls xz bd
ym cls
ym xz
ym bd

注意:$*  和$@都是输出所有内容,如果两个都不加双引号,则输出的是$1,$2,$3...这样的内容,如果加了双引号,$*会按照一个整体输出($1......$3)$@任然会按照$1,$2,$3...这样分开输出

4、while循环

 基本语法

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

注意:while和[之间有空格,[和条件判断式之间也有空格

举例:1~100相加

[root@localhost data]# cat while.sh 
#!/bin/bash

sum=0
i=1
while [ $i -le 100 ]
do
    sum=$[$sum+$i]
    i=$[$i+1]
done

echo $sum
[root@localhost data]# sh while.sh 
5050

备注:-le  小于等于的意思 

二、read读取控制台的输入

基本语法:

read(选项)(参数)

选项:

-p  指定读取值时的提示符

-t  指定读取时等待的时间(s)

参数:

变量:指定读取值的变量名

举例:提示7秒内,读取控制台输入的名字

 

 三、函数

1、系统函数

basename[string/pathname][suffix]   删除所有路径,只保留文件

[root@localhost data]# basename /home/data/helloword.sh 
helloword.sh

dirname 去除文件名,只保留路径

[root@localhost data]# dirname /home/data/helloword.sh 
/home/data

2、自定义函数

语法:

[ function ] funname[()]
{
        Action;
        [return int;]

}

funname

方括号括起来的是非必要填的

注意点:

1、必须在函数调用之前先声明函数,shell脚本时逐行运行的,并且不需要编译,直接运行

2、函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将已最后一条命令运行结果,作为返回值,return后跟数值n(0~255)

举例:

[root@localhost data]# cat sum.sh 
#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
    
}

read -p "Please input first num:" n1;
read -p "Please input secoune num:" n2;

sum $n1 $n2;
[root@localhost data]# sh sum.sh 
Please input first num:1
Please input secoune num:5
6
原文地址:https://www.cnblogs.com/frankruby/p/14361428.html