目录
1. 循环语句
1.1 for循环
语法格式:
for var in list 注意没有“:”;var为循环变量,list为元素集合
do
循环语句 # 这里是需要循环的语句
done
示例:分别输出数组array=(1 2 3 4 5)从0–5。
#!/bin/bash
array=(1 2 3 4 5)
for num in ${array[@]} # 表示按元素索引赋值给变量num
do
echo $num
done
输出:
1
2
3
4
5
1.2 while循环
语法格式:
while 表达式
do
循环语句
done
示例:分别输出数组array=(1 2 3 4 5)从0–5。
#!/bin/bash
array=(1 2 3 4 5)
l=${#array[@]} 获取数组长度
i=0
while (($i<$l)) 判断循环条件
do
echo ${array[i]} 输出数组中i的索引
let "i++"
done
输出:
1
2
3
4
5
示例:输出值判断循环条件;输入值可以使用read
#!/bin/bash
echo "请输入0--9.0将终止循环:"
read num
while !(($num==0))
do
echo "循环"
read num
done
输出:
1
循环
2
循环
0
1.3 until循环
语法格式:
until 表达式 注意条件为假时执行
do
循环语句
done
示例:分别输出数组array=(1 2 3 4 5)从0–5。
#!/bin/bash
array=(1 2 3 4 5)
l=${#array[@]}
i=0
until (($i>=$l)) #注意条件为假时执行
do
echo ${array[i]}
let "i++"
done
输出:
1
2
3
4
5
1.4 select循环
select循环是shell中一种特殊的循环。
语法格式:
select var in list var是必须的变量;由用户输入;list是数组,会输出到终端。
do
循环语句
done 该循环为死循环,必须使用break,ctrl+c结束
示例:
#!/bin/bash
echo "what is your favorite os?"
select var in "linux" "Windows" "others"
do
break;
done
echo "your favorite is $var"
输出:
what is your favorite os?
1) linux
2) Windows
3) others 循环过程
#? 1 输出1:linux
your favorite is linux
示例:与case的结合使用
#!/bin/bash
echo "what is your favorite os?"
select var in "linux" "Windows" "others"
do
case $var in
linux)
echo "you selected is $var"
;;
Windows)
echo "you selected is $var"
;;
others)
echo "you selected is $var"
;;
*)
echo input error
break
;;
esac
done
输出:
what is your favorite os?
1) linux
2) Windows
3) others
#? 1
you selected is linux
#? 2
you selected is Windows
#? 2
you selected is Windows
#? 0
input error
1.5 continue与break语句
continue 语句是终止本次循环,进入下次循环;break语句是直接跳出循环,不执行剩下的循环。
示例:continue
#!/bin/bash
for var in 1 2 3 4 5
do
if [ "$var" -eq 3 ] # 当为 3 时跳过,不执行
then
continue
fi
echo $var
done
输出:
1
2
4
5
示例:break
#!/bin/bash
for var in 1 2 3 4 5
do
if [ "$var" -eq 3 ] # 当为 3 时跳出循环,结束
then
break
fi
echo $var
done
输出:
1
2
2. 数组
2.1 定义数组
可以先声明数组,也可以不声明直接定义
a1=(1 2 3 4 5) 直接定义
declare -a a2 先声明
a2=(1 2 3 4 5) 再定义
将包含空格的字符串转为数组
DATA="s t d u y"
a3=($DATA)
输出元素的值定义数组
a4[0]=1
a4[1]=2
a4[2]=3
echo $ {a4[2]} #输出3
销毁数组:unset
unset a1[4] 销毁a1的第四个元素
unset a1 销毁整个a1
2.2 获取数组长度
语法格式:
${#array[@]} 数组前加“#”号
${#array[*]}
示例:
a2=(1 2 3)
echo ${#a2[@]}
输出为3
echo ${#a2[*]}
输出为3
同时井号也可以输出变量长度
x=asdf
echo ${#x}
输出为4
2.3 数组切片
语法格式:
a1=${array[@]:m:n}
a1=${array[*]:m:n} m为数组切片的起始位置,m可以为负数,从后取,n为要切取数量,均为整数
示例:
a1=(1 2 3)
a1=${array[@]:1:2}
输出:2 3
${a1[*]:(-2):2}
输出 2 3
2.4 数组替换
语法格式:
${array[@]/from/to}
${array[@]/from/} 没有to的话就删除from指定的内容
示例:
a1=("Linux" "windows" "android")
echo ${a1[@]/i/I}
输出:LInux wIndows androId 将小写的i变大写
a1=("Linux" "windows" "android")
echo ${a1[@]/i/}
输出:Lnux wndows androd 删除i
2.5 关联数组
语法格式:
ass_array=([index]=val1[index1=val2])
关联数组可以使用字符作为索引
示例:
declare -A ass=([Linux]="hello Linux" [world]="hello world") 注意使用-A声明关联数组
echo ${ass[Linux]}
输出:“hello Linux”
echo ${ass[world]}
输出:“hello world”
3. 函数
3.1 函数定义
语法格式:
function 函数名()
{
函数体
}
示例:
#!/bin/bash
function func1() 函数定义
{
echo "first func" 函数功能
}
function func2()
{
echo "second func"
}
func1
func2 函数调用
输出:
first func
second func
3.2 函数的参数
示例:
#!/bin/bash
function func1() #函数定义
{
echo "first func" # 函数功能
echo "脚本名:" $0
echo "第一个参数:" $1
}
func1 arg
输出:
first func
脚本名: func.sh
第一个参数: arg
3.4 函数的返回值
如果用户希望自定义返回值,可以在函数的最后添加“return n”,其中n的取值为0~255。
示例:
#!/bin/bash
function func1() #函数定义
{
echo "first func" # 函数功能
}
function func2()
{
echo "second func"
return 3
}
func1
echo "第一个返回值:" $?
func2
echo "第二个返回值:" $?
输出:
first func
第一个返回值: 0
second func
第二个返回值: 3
后记:内容持续更新中。。。。。。