一文学会shell编程3

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

后记:内容持续更新中。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值