普通数组
- 创建脚本文件
sf_array_01.sh
,内容如下:
#!/usr/bin/bash
my_array=(A B "C" D)
my_array[4]=E
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
echo "第五个元素为: ${my_array[4]}"
echo "所有元素: ${my_array[*]}"
echo "所有元素: ${my_array[@]}"
echo "所有元素索引:${!my_array[*]}"
echo "数组的长度为: ${#my_array[*]}"
- 执行脚本
sh sf_array_01.sh
,结果如下:
image.png
-
${my_array[0]}
:获取数组指定下标元素;
-
${my_array[*]}
与${my_array[@]}
:获取数组所有元素;
-
${!my_array[*]}
:获取数组所有索引;
-
${#my_array[*]}
:获取数组长度;
关联数组
- Bash从
4.0版本
才开始支持使用关联数组,若Bash版本低于4.0版本就使用关联数组,就会出现报错;
- 关联数组的
下标可以采用非整型类型
,类似于java中的key-value类型,其中,key为下标,value为对应的元素的值,key唯一,value可以不唯一;
- 使用关联数组前应该先声明
declare -A array
函数
- 函数是shell脚本中自定义的一系列执行命令,一般来说函数应该有返回值,正确返回0,错误返回非0;
函数的定义,实现与调用
- 函数的定义实现,创建脚本文件
function.sh
,如下所示:
#!/bin/bash
#函数定义一
function hello(){
echo "hello world!!!"
}
#函数调用
hello
#函数定义二
hello2(){
echo "hello2 world!!!"
}
#函数调用
hello2
案例:统计文件行数
- 创建脚本文件
function_count.sh
,内容如下:
#!/bin/bash
File=/etc/passwd
count(){
local I=0
while read line
do
let I++
done <$File
echo "$File is count $I"
}
count
函数返回值
- 函数的返回值又叫函数的退出状态,实际上是一种通信方式;
- 创建脚本文件
function_file.sh
,内容如下:
#!/bin/bash
File=/etc/qqqqq
check_file(){
if [ -f $File ]; then
return 0
else
return 1
fi
}
check_file
if [ $? -eq 0 ]; then
echo "该文件存在 $File"
else
echo "该文件不存在 $File"
fi
- if [ -f $File ]:判断File文件是否存在;
案例:数字游戏
- 创建脚本文件
function_num.sh
,内容如下:
#!/bin/bash
check_num(){
read -p "请输入对应的数字: " num
if [ $num -ge 0 -a $num -lt 10 ]; then
return 0
elif [ $num -ge 10 -a $num -lt 20 ]; then
return 1
elif [ $num -ge 20 -a $num -lt 30 ]; then
return 2
else
return 3
fi
}
check_num
#变量保存check_num函数的返回值
test=$?
if [ $test -eq 0 ]; then
echo "您输入的数字是[0,10)"
elif [ $test -eq 1 ]; then
echo "您输入的数字是[10,20)"
elif [ $test -eq 2 ]; then
echo "您输入的数字是[20,30)"
else
echo "您输入的数字 -- 其他"
fi
- 注意⚠️:需要用变量记录check_num函数的返回值,否则会出现逻辑错误,执行脚本,如下所示:
image.png
指定位置参数值
- 我们知道在脚本运行时可以传入位置参数,还可以使用内置命令
set
给脚本指定位置参数的值(又叫重置),一旦使用set设置了传入参数的值,脚本将忽略运行时传入的位置参数;
- 创建脚本文件
function_set.sh
,内容如下:
#!/bin/bash
set 6 5 4 3 2 1 2 3 4 5 6
count=1
for i in $*
do
echo "count: $i"
let count++
done
网友评论