Linux系统配置(shell函数与数组)


前言

在shell中使用函数可以将提前写好的内容随时调用,数组则可以存放多个值,使用时可选择输出某一个值或整体

一、函数

1、创建函数

在shell脚本中添加函数格式如下

function 函数名 {
操作或命令
}

函数名 () {
操作或命令
}



[root@pc1 ~]# vi sh
#!/bin/bash
a ( ) {
echo 运行成功
}
b=1
while [ $b -le 3 ]
do
a
b=$[$b+1]
done
echo 再运行一次
a
echo 结束

[root@pc1 ~]# sh sh
运行成功
运行成功
运行成功
再运行一次
运行成功
结束

2、使用位置参数

计算工资
[root@pc1 ~]# vi sh
#!/bin/bash
b () {
dixin=6000
for a in $1
do
gongzi=`expr $dixin + 100 \* $2`
echo $a工资为:$gongzi
done
}
echo 工资结果如下
c=$(b 张三 2)
echo $c
e=$(b 李四 4)
echo $e
f=$(b 王五 2)
echo $f

[root@pc1 ~]# sh sh
工资结果如下
张三工资为:6200
李四工资为:6400
王五工资为:6200

3、乘法运算

[root@pc1 ~]# vi sh
#!/bin/bash
a () {
echo $[ $1 * $2 ]
}
if [ $# -eq 2 ]
then b=$(a $1 $2)
echo "结果为:$b"
else echo "格式应为: sh $0 $1 $2"
fi

[root@pc1 ~]# sh sh 10 20
结果为:200

[root@pc1 ~]# sh sh 10 20 30
格式应为: sh sh 10 20

4、作用范围

local是用来将变量指定为局部变量,不在全局脚本中生效

[root@pc1 ~]# vi sh
#!/bin/bash
a () {
local b=10
echo "$b"
}
b=20
echo "$b"
a

[root@pc1 ~]# sh sh
20
10

5、计算阶乘

[root@pc1 ~]# vi sh
#!/bin/bash
a () {
if [ $1 = 1 ]
then echo 1
else
local b=$[ $1 - 1 ]
local c=$(a $b)
echo $[ $c * $1 ]
fi
}
echo 例:计算阶乘5的结果为5!=5x4x3x2x1=120
read -p "输入要计算阶乘的数值:" e
c=$(a $e)
echo 计算的结果为:"$c"

[root@pc1 ~]# sh sh
例:计算阶乘5的结果为5!=5x4x3x2x1=120
输入要计算阶乘的数值:5
计算的结果为:120

6、筛选目录和文件

筛选出某目录及子目录下包含目录及文件

[root@pc1 ~]# vi sh
#!/bin/bash
a () {
for b in `ls $1`
do
if [ -d "$1/$b" ]
then echo 子目录:"$b"
a "$1/$b"
else
echo 文件:"$b"
fi
done
}
echo "$1"目录及子目录下包含有:
a "$1"

[root@pc1 ~]# sh sh 目录

二、数组

1、表示方法

a=(1 2 3 4 5)

a=([1]=10 [2]=30 [3]=30)

b="1 2 3 4 5"
a=($b)

a[1]=10
a[2]=20
a[3]=30

read -a a
1 2 3 4 5

2、使用方法

显示数组值
echo ${a[*]}

echo ${a[@]}


显示数组长度
echo ${#a[*]}

echo ${#a[@]}


显示某位数组的值(第一个数组为0位)
echo ${a[位数]}


显示范围数组的值(第一个数组为0位)
echo ${a[@]:起始位数:结束位数}


数组替换(echo只是将输出内容修改并不是真正修改了数组的值,第一个数组为0位)
echo ${a[@]/第几个数组/替换内容}

a[第几个数组]=替换内容


数组删除(第一个数组为0位)
unset a[要删除数组的位数]

3、使用数组的某个值

[root@pc1 ~]# vi sh
#!/bin/bash
a () {
echo 参数为:"$@"
b=$1
echo 输出为:"${b[*]}"
}
c=(1 2 3 4 5)
echo 初始为:"${c[*]}"
a $c

[root@pc1 ~]# sh sh
初始为:1 2 3 4 5
参数为:1
输出为:1

4、使用整个数组

[root@pc1 ~]# vi sh
#!/bin/bash
a () {
b=("$@")
echo 输出为:"${b[*]}"
}
c=(1 2 3 4 5)
echo 初始为:"${c[*]}"
a "${c[*]}"

[root@pc1 ~]# sh sh
初始为:1 2 3 4 5
输出为:1 2 3 4 5

5、冒泡排序

从小到大排序(从大到小排序将-gt改为-lt)

[root@pc1 ~]# vi sh
#!/bin/bash
read -p "输入数组:" b
a=($b)
for i in `seq 0 ${#a[@]}`
do
for((j=i+1;j<${#a[@]};j++))
do
if [[ ${a[${i}]} -gt ${a[${j}]} ]]
then c=${a[${i}]}
a[${i}]=${a[${j}]}
a[${j}]=${c}
fi
done
done
echo 从小到大排序
echo 排序后为:${a[@]}

[root@pc1 ~]# sh sh
输入数组:3 2 1
排序后为:1 2 3

[root@pc1 ~]# vi sh
#!/bin/bash
read -p "输入数组:" b
a=($b)
for ((c=1;c<${#a[*]};c++))
do
for ((d=0;d<${#a[*]}-$c;d++))
do
if [ ${a[d]} -gt ${a[$(($d+1))]} ]
then e=${a[d]}
a[d]=${a[(($d+1))]}
a[(($d+1))]=$e
fi
done
done
echo 从小到大排序
echo 排序后为:${a[*]}

[root@pc1 ~]# sh sh
输入数组:3 2 1
排序后为:1 2 3

结语

数组是多个数值的集合,其中的每一个数值都称为元素,函数在定义时不能指明参数,但是在调用时可以传递参数

版权声明:本文为博主「1风天云月」的原创文章,版权归原作者所有。
阿里云链接:https://developer.aliyun.com/article/871962
CSDN链接:https://blog.csdn.net/le616616/article/details/123077125

上一篇:C语言参考库


下一篇:【图像相关学习】常见的摄像头模块的使用