标签: array

如何将 bash 样式的数组移植到 ash?

前段时间我写了一个 bash 脚本,现在应该能够在ash.

bash它是这样的:

services=( "service1.service"
           "service2.service"                                       
           "service3.service" )  

for service in "${services[@]}"
do
   START $service                   
done

START()
{
   echo "Starting "$1
   systemctl start $1
}
Run Code Online (Sandbox Code Playgroud)

实际上,阵列中大约有 40 个服务,我想让这种转换尽可能轻松和干净。一直在使用bashisms。现在,我正忙于使脚本更具可移植性的任务。

出于可移植性的原因,拥有一个纯粹的ash解决方案可能会很好。但是由于我有一个非常强大的功能busybox,我可能会牺牲一些便携性。只有在可读性大大提高的情况下,因为“干净”的脚本也是一个指标。

在这种情况下,什么是便携式干净的解决方案?

shell bash array ash

17
推荐指数
2
解决办法
1万
查看次数

如何测试一个项目是否在 bash 数组中?

一个简单脚本的帮助

#!/bin/bash

array1=(
prova1
prova2
slack64
)

a="slack64"
b="ab"

if [ $a = $b ]
then
      echo "$a = $b : a is equal to b"
else
      echo "$a = $b: a is not equal to b"
fi
Run Code Online (Sandbox Code Playgroud)

这个脚本根本不起作用,我想要一个脚本来检查列表中是否存在 slack64(我使用数组),然后简单地给我,是存在或否。我不知道如何将数组与单个变量进行比较。

bash array

16
推荐指数
5
解决办法
11万
查看次数

Bash 脚本等待进程并获取返回码

我正在尝试创建一个脚本,它将启动许多后台命令。对于每个后台命令,我都需要获取返回码。

我一直在尝试以下脚本:

 #!/bin/bash
set -x
pid=()
return=()


for i in 1 2
do
 echo start $i
 ssh mysql "/root/test$i.sh" &
 pid[$i]=$!
done

for i in ${#pid[@]}
do
echo ${pid[$i]}
wait ${pid[$i]}
return[$i]=$?

if [ ${return[$i]} -ne 0 ]
then
  echo mail error
fi

done

echo ${return[1]}
echo ${return[2]}
Run Code Online (Sandbox Code Playgroud)

我的问题是在等待循环期间,如果第二个 pid 在第一个之前完成,我将无法获得返回码。

我知道我可以运行wait pid1 pid2,但是使用此命令我无法获取所有命令的返回码。

任何的想法 ?

linux bash process array

15
推荐指数
3
解决办法
4万
查看次数

BASH中两个数组的交集

我有两个这样的数组:

A=(vol-175a3b54 vol-382c477b vol-8c027acf vol-93d6fed0 vol-71600106 vol-79f7970e vol-e3d6a894 vol-d9d6a8ae vol-8dbbc2fa vol-98c2bbef vol-ae7ed9e3 vol-5540e618 vol-9e3bbed3 vol-993bbed4 vol-a83bbee5 vol-ff52deb2)
B=(vol-175a3b54 vol-e38d0c94 vol-2a19386a vol-b846c5cf vol-98c2bbef vol-7320102b vol-8f6226cc vol-27991850 vol-71600106 vol-615e1222)
Run Code Online (Sandbox Code Playgroud)

数组未排序,甚至可能包含重复元素。

  1. 我想使这两个数组相交并将元素存储在另一个数组中。我该怎么做?

  2. 另外,如何获取出现在 B 中但在 A 中不可用的元素列表?

scripting bash array

15
推荐指数
2
解决办法
2万
查看次数

在 Bash 中从字符串到“单词”数组

我需要从一个字符串到一个数组,其中每个条目都是该字符串上的每个单词。例如,从以下开始:

VotePedro="Vote for Pedro"
Run Code Online (Sandbox Code Playgroud)

我需要数组:

Vote
For
Pedro
Run Code Online (Sandbox Code Playgroud)

然后我应该能够迭代为:

for i in "${votePedroArray[@]}"
    do
    ## Do something
    done
Run Code Online (Sandbox Code Playgroud)

bash array string shell-script

15
推荐指数
2
解决办法
2万
查看次数

How do I shift a bash array at some index in the middle?

1  #!/bin/bash
2  # query2.sh
3
4  numbers=(53 8 12 9 784 69 8 7 1)
5  i=4
6
7  echo ${numbers[@]} # <--- this echoes "53 8 12 9 784 69 8 7 1" to stdout.
8  echo ${numbers[i]} # <--- this echoes "784" to stdout.
9
10 unset numbers[i]
11
12 echo ${numbers[@]} # <--- this echoes "53 8 12 9 69 8 7 1" to stdout.
13 echo ${numbers[i]} # <--- stdout is blank.
Run Code Online (Sandbox Code Playgroud)

Why, in line …

bash array variable

15
推荐指数
2
解决办法
5493
查看次数

如何在bash中测试数组元素是否都相等?

以下数组表示每台 linux 机器上的磁盘数量

每个单个阵列都包含linux 机器上的磁盘数量。

echo ${ARRAY_DISK_Quantity[*]}
4 4 4 4 2 4 4 4
Run Code Online (Sandbox Code Playgroud)

识别所有数组的值都相等的简单方法是什么?

良好状态:

4 4 4 4 4 4 4 4
Run Code Online (Sandbox Code Playgroud)

状态不佳:

4 4 4 4 4 4 2 4
Run Code Online (Sandbox Code Playgroud)

状态不佳:

6 6 6 6 6 6 6 6 6 6 2 6 2
Run Code Online (Sandbox Code Playgroud)

bash array awk shell-script

15
推荐指数
2
解决办法
1万
查看次数

如何将数组传递给 bash shell 脚本?

如何将数组作为变量从第一个 bash shell 脚本传递到第二个脚本。

第一个.sh
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
sh second.sh "$AR" # foo
sh second.sh "${AR[@]}" # foo
Run Code Online (Sandbox Code Playgroud) 第二个.sh
#!/bin/bash
ARR=$1
echo ${ARR[@]}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,结果都是foo。但我想要的结果是foo bar baz bat.

我做错了什么,我该如何解决?

shell bash array shell-script

14
推荐指数
2
解决办法
4万
查看次数

如何在bash中移动数组值

我们要构建 6 个挂载点文件夹作为示例

/data/sdb
/data/sdc
/data/sdd
/data/sde
/data/sdf
/data/sdg
Run Code Online (Sandbox Code Playgroud)

所以我们使用数组编写了这个简单的 bash 脚本

folder_mount_point_list="sdb sdc sdd sde sdf sdg"

folderArray=( $folder_mount_point_list )

counter=0
for i in disk1 disk2 disk3 disk4 disk4 disk5 disk6
do
folder_name=${folderArray[counter]}
mkdir /data/$folder_name
let counter=$counter+1
done
Run Code Online (Sandbox Code Playgroud)

现在我们想改变没有counter的代码并且let=$counter=counter+1

是否可以移动每个循环数组以获得下一个数组值?

就像

${folderArray[++]}
Run Code Online (Sandbox Code Playgroud)

linux bash array awk shell-script

14
推荐指数
2
解决办法
1万
查看次数

使用 getopts 为一个选项提供两个参数

在下面的代码,当我给选项rgetopts需要一个参数:

while getopts ":hr::l:" opt; do
    case $opt in
        r ) echo "Run Numbers - argument = $OPTARG " ;;
        l ) echo "Latency range - argument = $OPTARG" ;;
        h ) helptext
            graceful_exit ;;
        * ) usage
            clean_up
            exit 1
    esac
done
Run Code Online (Sandbox Code Playgroud)

但是我需要在-r选项之后传递两个参数,而不是一个。是否有捷径可寻?

options array shell-script getopts

13
推荐指数
1
解决办法
4万
查看次数

标签 统计

array ×10

bash ×9

shell-script ×5

awk ×2

linux ×2

shell ×2

ash ×1

getopts ×1

options ×1

process ×1

scripting ×1

string ×1

variable ×1