一天Shell入门(二)

一、流程控制【if case for while】重点

if

1.基本语法
条件判断两边必须空格,if后面跟空格

if [ 条件判断式 ];then 
  程序 
fi 
或者 
if [ 条件判断式 ] 
    then 
    程序 
fi

注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格

2.案例实操
输入一个数字,如果是1,则输出kk is so cute,如果是2,则输出cno way,如果是其它,什么也不输出

[root@master shell]# vim if.sh

#!bin/bash

if [ $1 -eq 1 ]
then
        echo "kk is so cute"
elif [ $1 -eq 2 ]
then
        echo "no way"
fi
[root@master shell]# sh if.sh 
if.sh: line 3: [: -eq: unary operator expected
if.sh: line 6: [: -eq: unary operator expected
[root@master shell]# sh if.sh 1
kk is so cute
[root@master shell]# sh if.sh 2
no way
[root@master shell]# sh if.sh 3

case

1.基本语法

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

注意事项:

  1. case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
  2. 双分号“;;”表示命令序列结束,相当于java中的break。
  3. 最后的“*)”表示默认模式,相当于java中的default。

2.案例实操
(1)输入一个数字,如果是1,则输出longkk,如果是2,则输出Hopeless,如果是其它,输出Nice。

root@master shell]# sh case.sh 

#!bin/bash
case $1 in
1)
        echo "longkk"
;;
2)
        echo "Hopelesss"
;;
*)
        echo "Nice"
;;
esac

[root@master shell]# vim case.sh
[root@master shell]# sh case.sh 1
longkk
[root@master shell]# sh case.sh 2
Hopelesss
[root@master shell]# sh case.sh 4
Nice

For

1.基本语法1

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

2.案例实操
(1)从1加到100

[root@master shell]# vim for.sh
#!bin/bash
s=0
for ((i=1;i<=100;i++))
do
        s=$[$s+$i]
done
echo $s
[root@master shell]# sh for.sh 
5050

基本语法2

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

4.案例实操
(1)打印所有输入参数

[root@master shell]# vim Nfor.sh

#!/bin/bash

for i in $*
do
        echo "long kk love $i "
done
~                                                                                                                      
[root@master shell]# sh Nfor.sh kim
long kk love kim 
[root@master shell]# sh Nfor.sh miki
long kk love miki 
[root@master shell]# sh Nfor.sh kim wiki
long kk love kim 
long kk love wiki 
[root@master shell]# sh Nfor.sh kim wiki hans
long kk love kim 
long kk love wiki 
long kk love hans 

(2)比较*和@区别
(a)*和@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以12 …$n的形式输出所有参数。

[root@master shell]# vim Nfor.sh 
#!/bin/bash

for i in $*
do
        echo "long kk love $i "
done

for j in $@
do
        echo "long kk love $ji "
done
[root@master shell]# sh Nfor.sh kim wiki hans
long kk love kim 
long kk love wiki 
long kk love hans 
long kk love  
long kk love  
long kk love  

(b)当它们被双引号“”包含时,“*”会将所有的参数作为一个整体,以“1 2 …n”的形式输出所有参数;“@”会将各个参数分开,以“1” “2”…”n”的形式输出所有参数。$*变成一个整体

[root@master shell]# vim Nfor.sh 
#!/bin/bash

for i in "$*"
do
        echo "long kk love $i "
done

for j in "$@"
do
        echo "long kk love $ji "
done
[root@master shell]# sh Nfor.sh kim wiki hans
long kk love kim wiki hans 
long kk love  
long kk love  
long kk love  

While

1.基本语法

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

2.案例实操
(1)从1加到100

[root@master shell]# vim while.sh
#!bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s + $i]
        i=$[$i + 1]
done
echo $s  $i

[root@master shell]# sh while.sh 
5050 101

二、Read读取控制台输入

1.基本语法

read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
    变量:指定读取值的变量名

2.案例实操
(1)提示5秒内,读取控制台输入的名称

[root@master shell]# vim read.sh
#!/bin/bash
read -t 5 -p "input  your name in 5 seconds " NAME
echo $NAME

[root@master shell]# sh read.sh 
input  your name in 5 seconds mike
mike
[root@master shell]# sh read.sh 
input  your name in 5 seconds 

三、函数

系统函数

1.basename基本语法
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
2.案例实操
(1)截取该/home/atguigu/banzhang.txt路径的文件名称

[root@master shel]$ basename /home/shel]/banzhang.txt 
banzhang.txt
[root@master shel]$ basename /home/shel]/banzhang.txt .txt
banzhang
  1. dirname基本语法
    dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
    4.案例实操
    (1)获取banzhang.txt文件的路径
[root@master shel]$ dirname /home/atguigu/banzhang.txt 
/home/shell

自定义函数

1.基本语法

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

2.经验技巧
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
3.案例实操
(1)计算两个输入参数的和

[root@master shell]# vim sum.sh

#!bin/bash
function sum()
{
        s=0;
        s=$[$1+$2]
        echo $s
}

read -p "input your paratemer1:" p1
read -p "input your paratemer2:" p2

sum $p1 $p2

[root@master shell]# sh sum.sh 
input your paratemer1:3
input your paratemer2:5
8
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。