我想写一个循环15个字符串的脚本(可能是数组?)这可能吗?

类似于:

for databaseName in listOfNames
then
  # Do something
end

当前回答

listOfNames="db_one db_two db_three"
for databaseName in $listOfNames
do
  echo $databaseName
done

或者只是

for databaseName in db_one db_two db_three
do
  echo $databaseName
done

其他回答

本着与4ndrew的回答相同的精神:

listOfNames="RA
RB
R C
RD"

# To allow for other whitespace in the string:
# 1. add double quotes around the list variable, or
# 2. see the IFS note (under 'Side Notes')

for databaseName in "$listOfNames"   #  <-- Note: Added "" quotes.
do
  echo "$databaseName"  # (i.e. do action / processing of $databaseName here...)
done

# Outputs
# RA
# RB
# R C
# RD

B.名称中无空格:

listOfNames="RA
RB
R C
RD"

for databaseName in $listOfNames  # Note: No quotes
do
  echo "$databaseName"  # (i.e. do action / processing of $databaseName here...)
done

# Outputs
# RA
# RB
# R
# C
# RD

笔记

在第二个示例中,使用listOfNames=“RA RB R C RD”具有相同的输出。

其他引入数据的方法包括:

stdin(如下所列),变量,数组(接受的答案),文件。。。

从stdin读取

# line delimited (each databaseName is stored on a line)
while read databaseName
do
  echo "$databaseName"  # i.e. do action / processing of $databaseName here...
done # <<< or_another_input_method_here

可以在脚本中指定bash IFS“字段分隔符到行”[1]分隔符,以允许其他空格(即IFS='\n',或MacOS IFS='\r')我也喜欢接受的答案:)--我将这些片段作为其他有用的方式来回答这个问题。包括#/脚本文件顶部的bin/bash指示执行环境。我花了几个月的时间才弄清楚如何简单地编写代码:)

其他来源(读取循环时)

您可以使用${arrayName[@]}的语法

#!/bin/bash
# declare an array called files, that contains 3 values
files=( "/etc/passwd" "/etc/group" "/etc/hosts" )
for i in "${files[@]}"
do
    echo "$i"
done

当然,这是可能的。

for databaseName in a b c d e f; do
  # do something like: echo $databaseName
done 

有关详细信息,请参阅、while和until的Bash循环。

我真正需要的是这样的东西:

for i in $(the_array); do something; done

例如:

for i in $(ps -aux | grep vlc  | awk '{ print $2 }'); do kill -9 $i; done

(将终止所有以vlc命名的进程)

单线循环,

 declare -a listOfNames=('db_a' 'db_b' 'db_c')
 for databaseName in ${listOfNames[@]}; do echo $databaseName; done;

你会得到这样的输出,

db_a
db_b
db_c