7.1 if 判断
1)基本语法
(1)单分支
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
(2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断之间必须有空格
(2)if 后要有空格
2)案例实操
输入一个数字, 如果是 1, 则输出 banzhang zhen shuai, 如果是 2, 则输出 cls zhen mei,如果是其它, 什么也不输出
➜ ~ touch if.sh
(1)➜ ~ vim if.sh
#!/bin/bash
[ $# -eq 0 ] && \
{ echo "Usage: if.sh <NUMBER:(1 or 2)>";exit; }
if [ $1 -eq 1 ] ;then
echo "banzhang zhen shuai"
elif [ $1 -eq 2 ] ;then
echo "cls zhen mei"
else
echo "Please input 1 or 2"
fi
(2)➜ ~ vim if.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
echo "cls zhen mei"
fi
➜ ~ chmod 777 if.sh
➜ ~ bash if.sh 1
banzhang zhen shuai
➜ ~ bash if.sh 2
cls zhen mei
7.2 case 语句
1)基本语法
case $变量名 in
"值 1")
如果变量的值等于值 1, 则执行程序 1
;;
"值 2")
如果变量的值等于值 2, 则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值, 则执行此程序
;;
esac
注意事项:
(1) case 行尾必须为单词“in” , 每一个模式匹配必须以右括号“) ” 结束。
(2) 双分号“;;” 表示命令序列结束, 相当于 java 中的 break。
(3) 最后的“*) ” 表示默认模式, 相当于 java 中的 default。
2)案例实操
输入一个数字,如果是1,则输出banzhang,如果是2,则输出 cls,如果是其他,输出renyao
➜ ~ touch case.sh
(1)➜ ~ vim case.sh
#!/bin/bash
[ $# -eq 0 ] && \
{ echo "Usage: case.sh <NUMBER:(1 or 2 or other)>";exit; }
case $1 in
1)
echo "banzhang"
;;
2)
echo "cls"
;;
*)
echo "renyao"
;;
esac
(2)➜ ~ vim case.sh
#!/bin/bash
[ $# -eq 0 ] && \
{ echo "Usage: case.sh <NUMBER:(1 or 2 or other)>";exit; }
case $1 in
"1")
echo "banzhang"
;;
"2")
echo "cls"
;;
*)
echo "renyao"
;;
esac
➜ ~ bash case.sh 1
banzhang
➜ ~ bash case.sh 2
cls
➜ ~ bash case.sh 3
renyao
7.3 for 循环
Shell是提供给管理员对内核进行交互的程序,是为了你更方便实现代码的输入,for循环是实现一些命令的重复操作的
1)基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2)案例实操
从1加到100
➜ ~ touch for1.sh
➜ ~ vim for1.sh
#!/bin/bash
SUM=0
for (( i=0;i<=100;i++ ));do
SUM=$[ $SUM+$i ]
done
echo $SUM
➜ ~ chmod 777 for1.sh
➜ ~ bash for1.sh
5050
1)基本语法2
for 变量 in 值 1 值 2 值 3…
do
程序
done
2)案例实操
(1)从1加到100
#从1加到100
➜ ~ vim for2.sh
#!/bin/bash
sum=0
for i in {1..100};do
sum=$[ $sum+$i ]
i=$[ $i+1 ]
done
echo "从1到100的总和 : $sum"
(2)打印所有输入参数
➜ ~ touch for2.sh
(1)➜ ~ vim for2.sh
#!/bin/bash
# 打印数字
for i in {cls,mly,wls}
do
echo "ban zhang love $i"
done
➜ ~ chmod 777 for2.sh
➜ ~ bash for2.sh
ban zhang love cls
ban zhang love mly
ban zhang love wls
(2)➜ ~ vim for2.sh
#!/bin/bash
# 打印数字
for i in cls mly wls
do
echo "ban zhang love $i"
done
(2)比较$ 和 $@ 的区别
$和$@都表示传递给函数或脚本的所有参数, 不被双引号“”包含时, 都以$1 $2 …$n的形式输出所有参数。
➜ ~ touch for3.sh
➜ ~ vim for3.sh
#!/bin/bash
echo '=========$*========='
for i in $* ;do
echo "ban zhang love $i"
done
echo '=========$@========='
for j in $@ ;do
echo "ban zhang love $j"
done
➜ ~ chmod 777 for3.sh
➜ ~ bash for3.sh cls mly wls
=========$*=========
ban zhang love cls
ban zhang love mly
ban zhang love wls
=========$@=========
ban zhang love cls
ban zhang love mly
ban zhang love wls
当它们被双引号“”包含时, $*会将所有的参数作为一个整体, 以“$1 $2 …$n”的形式输出所有参数; $@会将各个参数分开, 以“$1” “$2”…“$n”的形式输出所有参数。
➜ ~ touch for4.sh
➜ ~ vim for4.sh
#!/bin/bash
echo '=======$*======='
for i in "$*" ;do
# $*中的所有参数看成是一个整体, 所以这个 for 循环只会循环一次
echo "ban zhang love ${i}"
done
echo '=======$@======='
for j in "$@" ;do
# $@中的每个参数都看成是独立的, 所以“$@”中有几个参数, 就会循环几次
echo "ban zhang love ${j}"
done
➜ ~ chmod 777 for3.sh
➜ ~ bash for4.sh cls mly wls
=======$*=======
ban zhang love cls mly wls
=======$@=======
ban zhang love cls
ban zhang love mly
ban zhang love wls
引号是视为字符串吧,$*是把写入的变量当成一整个字符串echo出来,而$@是把每一个输入的变量当成独立的echo出来
7.4 while 循环
1)基本语法
while [ 条件判断式 ]
do
程序
done
2)案例实操
从1加到100
➜ ~ touch while.sh
➜ ~ vim while.sh
#!/bin/bash
SUM=0
i=1
while [ $i -le 100 ] ;do
SUM=$[ $SUM+$i ]
i=$[ $i+1 ]
done
echo $SUM
➜ ~ chmod 777 while.sh
➜ ~ bash while.sh
5050
➜ ~ vim while_test.sh
#!/bin/bash
sum=0
i=1
while [ $i -le ${1} ]
do
# sum=$[ $sum + $i ]
# i=$[ $i+1 ]
let sum+=i
let i++
done
echo $sum