本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类、语法格式以及脚本的使用和编写格式等。 不断更新中,是Shell学习的必读经典教程。 Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Shell脚本 Linux Shell系列教程之(三)Shell变量 Linux…
Shell: 传数组给函数, 函数接受数组参数,Passing array to function of shell script
直接先上代码:
myFunction(){ param1=("${!1}") param2=("${!2}") for i in ${param1[@]} do for j in ${param2[@]} do if [ "${i}" == "${j}" ] then echo ${i} echo ${j} fi done done } a=(foo bar baz) b=(foo bar qux) myFunction a[@] b[@]
或者:
#!/bin/bash function showArr(){ arr=$1 for i in ${arr[*]}; do echo $i done } regions=("GZ" "SH" "BJ") showArr "${regions[*]}" exit 0
输出:
./test.sh GZ SH BJ
个人做的改进是:
declare -a folders=('assets' 'css' 'fonts' 'js' 'jsons' 'pages') in_array() { local haystack=${1}[@] local needle=${2} local output=0 for i in ${!haystack}; do if [[ ${i} == ${needle} ]]; then output=1; fi done echo ${output}; }
用法:
in_array folders css
拓展一:遍历数组 Iterate Through Array Values
定义数组:
array=( one two three ) files=( "/etc/passwd" "/etc/group" "/etc/hosts" ) limits=( 10, 20, 26, 39, 48)
打印数组:
printf "%s\n" "${array[@]}" printf "%s\n" "${files[@]}" printf "%s\n" "${limits[@]}"
遍历数组:
for i in "${arrayName[@]}" do : # do whatever on $i done
或者文件
#!/bin/bash # declare an array called array and define 3 vales array=( one two three ) for i in "${array[@]}" do echo $i done
拓展二:声明或显示shell变量
readonly DATA=/usr/home/data/file.dat #或者 declare -r var=123
declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
语法
declare(选项)(参数)
选项
+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性; -f:仅显示函数; r:将变量设置为只读; x:指定的变量会成为环境变量,可供shell以外的程序来使用; i:[设置值]可以是数值,字符串或运算式。
参数
shell变量:声明shell变量,格式为“变量名=值”。
局部变量的作用域被限定在创建它们的shell中。local函数可以用来创建局部变量,但仅限于函数内使用。局部变量可以通过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置,或者省略也可。
格式:
变量名=值
declare 变量名=值
环境变量通常又称全局变量,以区别于局部变量,通常,环境变量应该大写,环境变量是已经用export内置命令导出的变量。子shell继承当前父shell的环境变量,并能一直传承下去,但是不可逆向传递。
格式:
export 变量=值
declare -x 变量=值
local一般用于局部变量声明,多在在函数内部使用。
(1)shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。
(2)shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。
(3)如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。
使用举例:
#!/bin/bash function Hello() { local text="Hello World!!!" #局部变量 echo $text } Hello
本文:Shell: 传数组给函数, 函数接受数组参数,Passing array to function of shell script