一、流程控制【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
注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于java中的break。
- 最后的“*)”表示默认模式,相当于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)@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以
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
long kk love wiki
long kk love hans
long kk love
long kk love
long kk love
(b)当它们被双引号“”包含时,“1
n”的形式输出所有参数;“
1” “
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
- 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