Shell脚本函数、数组及排序

目录

  • 一.Shell函数
      • 1.1、函数的格式
      • 1.2、函数的返回值
      • 1.3、函数的传参数
      • 1.4、使用函数文件
      • 1.5、函数的作用范围
      • 1.6、函数的递归
  • 二.Shell数组
  • 三.冒泡排序

一.Shell函数

1.1、函数的格式

法一:
[function] 函数名 (){
	命令序列
	[return x]        
}
 
法二:
函数名(){
	命令序列
}
#!/bin/bash
h () {
echo "hello"
}

w () {
echo "world"
}

nihao () {
h
w
}

h
w
nihao

[root@localhost data]# bash a.sh 
hello
world
hello
world

1.2、函数的返回值

  • return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

  • 函数的使用原则

    • 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;

    • 退出状态码必须是0~255,超出时值将为除以256取余。

#!/bin/bash
u () {
if [ $USER = root ]
then echo "是管理员用户"
else
echo "不是管理员用户"
return 1
fi
}
u
[root@localhost why]# bash a.sh 
是管理员用户
[root@localhost why]# su lisi
[lisi@localhost why]$ cd
[lisi@localhost ~]$ cd /why/
[lisi@localhost why]$ bash a.sh 
不是管理员

1.3、函数的传参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。

#!/bin/bash
sum (){
        sum=$[$1 +$2]
        echo $sum
}

read -p "请输入第一个参数:" n1
read -p "请输入第一个参数:" n2
sum $n1 $n2


[root@localhost why]# bash ss.sh 
请输入第一个参数:5
请输入第一个参数:10
15

1.4、使用函数文件

#!/bin/bash
color () {
RED="echo -e \E[31m"
GREEN="echo -e \E[32m"
END="\E[0m"
}

在这里插入图片描述

1.5、函数的作用范围

[root@localhost ~]# func1() { name=li ; echo $name; }
[root@localhost ~]# func1
li
[root@localhost ~]# echo $name
li
[root@localhost ~]# name=why;func1() { local name=li;echo $name; };echo $name
why
#加上local变量即可将变量限制在函数内

1.6、函数的递归

#!/bin/bash
fact () {
#判断传入的参数,如果是0,则直接输出1
if [ $1 -eq 0  -o  $1 -eq 1 ]
then
   echo 1
else
#如果传入的参数不是1,则函数调用函数自身,传入参数计算
echo $[$1* $(fact $[$1-1])]
fi
}
fact $1

二.Shell数组

定义数组格式:

  1. 数组名=(value0 value1 value2 value3 …)

  2. 数组名=([0]=value [1]=value1 [2]=value2 …)

  3. 列表名="value0 value1 value2 value3 … "

    数组名=($列表名)

  4. 数组名[0]=“value1”

    数组名[1]=“value2”

    数组名[2]=“value3”

数组的包括数据类型

  • 数值型
  • 字符型
  • 混合型数值加字符

使用" "或’ '定义单引号或双引号括起来

[root@localhost ~]# a=(1 2 3 4 5)
               0 1 2 3 4
               
[root@localhost ky15]#declare -a
declare -a a='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")'
[root@localhost ~]# echo ${!a[*]}
#查看下标 
0 1 2 3 4

[root@localhost ~]# echo ${a[0]}
#数组的取值  数组加下标
1
输出第一一个数值  注意是从0开始计算
列出所有参数
[root@localhost ~]# echo ${a[*]}   //*代表所有参数
1 2 3 4 5
[root@localhost ~]# echo ${a[@]}   //@同*
1 2 3 4 5
共有多少个位置
[root@localhost ~]# echo ${#a[@]}     //前面加#数组的长度
5
[root@localhost ~]# echo ${#a[*]}    
5

#数组分隔
[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ky15]#echo ${a[@]:0:5}
1 2 3 4 5
[root@localhost ky15]#a[1]=9
#数组替换
[root@localhost ky15]#echo ${a[1]}
9
[root@localhost ky15]#echo ${a[@]}
1 9 3 4 5

[root@localhost ky15]#echo ${b[@]/西瓜/葡萄}
#只是显示没有真正的修改
橘子 香蕉 葡萄
[root@localhost ky15]#echo ${b[@]}
橘子 香蕉 西瓜

[root@localhost ~]#list="1 2 3 4 5"
#先定义列表
[root@localhost ~]#list1=($list)
#再定义数组
[root@localhost ~]#echo ${list1[@]}
1 2 3 4 5

三.冒泡排序

#!/bin/bash
a=(20 80 75 13 97 53 144 )
for ((j=1;j<${#a[@]};j++))
do
for ((i=0;i<${#a[@]}-j;i++))
do
if  [ ${a[$i]} -gt ${a[$i+1]} ]
then
tmp=${a[$i+1]}
a[$i+1]=${a[$i]}
a[$i]=$tmp
fi
done
done
echo ${a[*]} 


[root@localhost why]# bash pao.sh 
13 20 53 75 80 97 144

你可能感兴趣的:(bash,linux,开发语言)