Shell for
字符型循环
语法格式:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
例子:
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
数字型循环
语法格式:
for (( 初始值;循环控制条件;变量变化 ))
do
command1
command2
...
commandN
done
例子:
for ((i=0; i<=5; i++))
do
echo "The value is $i"
done
Shell while
语法格式:
while condition
do
command
done
例子:
int=1
while(( $int<=6 ))
do
echo $int
let "int++"
done
注:let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
Shell 无限循环
语法格式:
while :
do
command
done
例子:
while true
do
command
done
for (( ; ; ))
Shell case
case 多选择语句,类似于电梯与选择的楼层匹配则停哪一层。每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束。
语法格式:
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
例子:
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read a
case $a in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
Shell 跳出循环
break,直接跳出循环,终止break后续的代码执行。
例子:
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done
continue,仅跳出当前循环。
例子:
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
Shell 函数
语法格式:
[ function ] funname()
{
action;
[return int;]
}
例子:
demoFun(){
echo "测试一下我的函数!"
}
echo "函数开始执行"
demoFun
echo "-函数执行完毕"
注:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
传参函数例子:
#!/bin/bash
funWithReturn(){
s=0
#求1-n的和,$1为传入的第一个参数
for(( i=1;i<=$1;i=i+1))
do
s=$(($s+$i))
done
#返回计算结果
echo $s
return 0;
}
#调用函数,并传入参数,求1-100的和
#result用户获取函数的返回结果,也就是echo后边的内容
result=$(funWithReturn 100)
echo "1-$1的和:$result"
#状态码为0表示正常退出,非0表示不正常退出
echo "退出状态码: $? !"
#!/bin/bash
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
注:调用函数时可以向其传递参数。在函数体内部,通过的形式来获取参数的值,例如,1表示第一个参数,$2表示第二个参数
Shell 数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
数组用括号来表示,元素用"空格"符号分割开。
语法格式:
array_name=(value1 ... valuen)
例子:
#!/bin/bash
my_array=("A" "B" "C" "D")
#我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组
语法格式:
${array_name[index]}
例子:
#!/bin/bash
my_array=("A" "B" "C" "D")
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
获取数组所有元素:
使用@ 或 * 可以获取数组中的所有元素。
例子:
#!/bin/bash
my_array[0]="A"
my_array[1]="B"
my_array[2]="C"
my_array[3]="D"
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
获取数组长度:
获取数组长度的方法与获取字符串长度的方法相同。
例子:
#!/bin/bash
my_array[0]="A"
my_array[1]="B"
my_array[2]="C"
my_array[3]="D"
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
遍历数组:
#!/bin/bash
my_arr=(AA BB CC)
for var in ${my_arr[*]}
do
echo $var
done
#!/bin/bash
my_arr=(AA BB CC)
my_arr_num=${#my_arr[*]}
for((i=0;i<my_arr_num;i++));
do
echo "-----------------------------"
echo ${my_arr[$i]}
done
Shell select
select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择。
语法格式:
select var in ... ;
do
commond
done
.... now $var can be used ...
例子:
#!/bin/bash
echo "What is your favourite OS?"
PS3="Please enter your choice:"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"
do
break;
done
echo "You have selected $var"
注:select 是个无限循环,因此要记住用 break 命令退出循环,或用exit 命令终止脚本;这里PS3作为select语句的shell界面提示符,注意:PS3一定要定义在select语句的前面。
select和case的配合使用:
#!/bin/bash
echo "你想学习什么语言?"
PS3="请输入你的选择:" # 设置提示字符串
select var in java c++ shell python
do
case $var in
"java")
echo "恭喜你选择成功.java最牛"
;;
"c++")
echo "驱动开发 网络优化 go 语言"
;;
"shell")
echo "运维必会"
;;
python)
echo "人工智能"
esac
break # 如果这里没有break 将会进行无限循环
done
echo "你选择的是:$var"