bash脚本数组
‘壹’ bash脚本函数,如何正确返回元素中带有空格的数组
1、用 getline 把一行的字母串 保存在一个string 里面2、直接字符串相加:比如要把hello world 存一个string里 输入hello world 第一个赋值给一个string 对象第二个 直接在第一个string 对象后面加空格再加上world 这样就可以将有空格的值保存的数组里了
‘贰’ shell脚本中数组的基本用法
首先要告诉大家,Bash Shell 只支持一维数组,而且初始化的时候不用定义数组的大小。
(一) 定义数组,方法1:使用小括号赋值
array1=(A B C D)或者array1=("A" "B" "C" "D")
定义数组,方法2:使用数组下表挨个赋值
array2[0]=a
array2[1]=b
可能会有朋友会问问什么不用declare声明也能用,在这跟大家拓展下,所有变量不用显式定义都能用作数组,所以用不用declare声明都可以
(二) 读取数组
${array[下标值]},例如:${array1[2]}
若要获取数组中全部的值,使用${array[*]}或者${array[@]}
(三) 获取数组长度 ${#array1[*]},关键在加了个#
(四) 删除数组内容元素 unset ${array1[下标]} ,删除整个数组 unset array1
‘叁’ shell脚本生成[4,9]范围内的随机整数,包含边界值4和9,并将随机数序列存放在一个数组中,脚本实现
#!/bin/sh
declare -a arr #声明arr为数组
arr=(`seq 4 9 | awk 'BEGIN{srand();ORS=" "} {b[rand()]=$0} END{for(x in b) print b[x]}'`)
echo ${arr[*]} #打印数组array的所有元素
exit 0
说明:
生成[4,9]范围内不重复的随机整数,并保存到数组arr中。
seq 4 9 用于生成4~9的整数序列(包含边界值4和9)。
awk中的rand() 函数用于随机产生一个0到1之间的小数值(保留小数点后6位)。
由于rand()只生成一次随机数,要使用srand() 函数使随机数滚动生成(括号里留空即默认采用当前时间作为随机计数器的种子)。这样以秒为间隔,随机数就能滚动随机生成了。
限制:
由于以秒为间隔,所以如果快速连续运行两次脚本(1s内),你会发现生成的随机数还是一样的。
‘肆’ bash脚本中,条件判断一个字串是否在数组中,除了列举之外,还有什么简单的写法吗
只能是遍历数组元素来比较:
if [ "$str1“ = "conditon1" ]; then
action1
elif [ “$str1” = "conditon3" ]; then
action 3
fi
for elem in ${array[@]}
do
if [ "$str1" = "$elem" ]; then
action2
break
fi
done
‘伍’ shell脚本中,无法获取“关联数组”(字典)的key,尝试过很多方法,输出都不对,求教
看下你使用的bash版本到没到4.0,使用指令bash --version查看
使用变量前先确认该变量是否在之前已经被定义过了 使用source 命令或 . 命令启动脚本时是不会开辟新线程的所以你在bash窗口里定义的没加local 变量 都会被脚本继承 此时你可以先删除这个变量 即定义phone 时 unset phone
‘陆’ shell脚本主要有哪些
第一个shell脚本程序:
#!/bin/bash
# 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行;echo "Hello, world!"
变量:
定义变量:
country="China"Number=100
注意: 1,变量名和等号之间不能有空格;
2,首个字符必须为字母(a-z,A-Z)。
3, 中间不能有空格,可以使用下划线(_)。
4, 不能使用标点符号。
5, 不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量:
只需要在一个定义过的变量前面加上美元符号$就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界.
country="China"echo $countryecho ${country}echo "I love my ${country}abcd!"
#这个需要有{}的;
重定义变量:直接把变量重新像开始定义的那样子赋值就可以了:
country="China"country="ribenguizi"
只读变量: 用 readonly 命令 可以把变量字义为只读变量。
readonly country="China"#或
country="China"readonly country
删除变量: 使用unset命令可以删除变量,但是不能删除只读的变量。用法:
unset variable_name
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
特殊变量:
其中, 1. 取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。2. 如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
‘柒’ shell脚本中数组array常用技巧学习实践
shell中数组的下标默认是从0开始的
1。将字符串放在数组中,获取其长度
#!/bin/bash
str=a
b
--n
d
array=($str)
length=${#array[@]}
echo
$length
for
((i=0;
i<$length;
i++))
do
echo
${array[$i]}
done
执行结果:
[oracle@99bill-as9
array]$
sh
length.sh
4
a
b
--n
d
打印字符串:
#!/bin/bash
str=a
b
c
for
i
in
$str
do
echo
$i
done
或者:
#!/bin/bash
str=a
b
c
array=($str)
for
((i=0;i<${#array[@]};i++))
do
echo
${array[$i]}
done
执行结果:
2。字符串用其他字符分割时
#!/bin/bash
str2=a#b#c
a=($(echo
$str2
|
tr
'#'
'
'
|
tr
-s
'
'))
length=${#a[@]}
for
((i=0;
i<$length;
i++))
do
echo
${a[$i]}
done
#echo
${a[2]}
执行结果:
3。数组的其他操作
#!/bin/bash
str=a
b
--n
dd
array=($str)
length=${#array[@]}
#ouput
the
first
array
element直接输出的是数组的第一个元素
echo
$array
#Use
subscript
way
access
array用下标的方式访问数组元素
echo
${array[1]}
#Output
the
array输出这个数组
echo
${array[@]}
#Output
in
the
array
subscript
for
3
the
length
of
the
element输出数组中下标为3的元素的长度
echo
${#array[3]}
#Output
in
the
array
subscript
1
to
3
element输出数组中下标为1到3的元素
echo
${array[@]:1:3}
#Output
in
the
array
subscript
greater
than
2
elements输出数组中下标大于2的元素
echo
${array[@]:2}
#Output
in
the
array
subscript
less
than
2
elements输出数组中下标小于2的元素
echo
${array[@]::2}
执行结果:
a
b
a
b
--n
dd
2
b
--n
dd
--n
dd
a
b
4。遍历访问一个字符串(默认是以空格分开的,当字符串是以其他分隔符分开时可以参考2)
#!/bin/bash
str=a
--m
for
i
in
$str
do
echo
$i
done
执行结果:
a
--m
5。如何使用echo输出一个字符串str=-n.
由于-n是echo的一个参数,所以一般的方法echo
$str是无法输出的.
解决方法可以有:
echo
x$str
|
sed
's/^x//'
echo
-ne
$str/n
echo
-e
$str/n/c
printf
%s/n
$str(这样也可以)
作者祝莹的专栏
‘捌’ bash脚本函数可不可以返回数组
bash 的函数只能返回整数值, 不能返回数组。 应该在函数里直接给数组赋值或者操作数组,比如下面的代码
test(){
m=(12345)
}
unsetm
#此时无m变量
test
#此时m变量为一数组
echo${m[1]}
‘玖’ linux shell脚本中,数组名称是一个变量,怎么打印出它里面的元素
题主你好,
代码及测试截图如下:
希望可以帮到题主, 欢迎追问.