grep for multiple elements of an array

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
0
down vote

favorite












I am trying to write a dd migration script that will do the following:



  1. read user input (max=4) into an array, called "array". the user will enter the logical volume names to be migrated.

  2. once each element is stored on an array, run:

/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"’



  1. spawn multiple ssh connections to migrate each logical volume via dd to a specific host, the IP of which is also entered by user and stored in a variable.

I currently have:



#!/bin/bash

echo "Enter upto 4 SRVID's seperated by a space"


while read SRVIDS
do


[ "$SRVIDS" == "done" ] && break
array=("$array[@]" $SRVIDS)

done



/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"' 2&>1


What am I doing wrong? I am unable to get grep for the logical volume paths.










share|improve this question



















  • 1




    Variables/arays names are not expanded under single quotes, you need to remove them. Also add $ in front of their names.
    – jimmij
    Dec 4 at 5:14











  • Getting the volume names on the command line would make the script more flexible.
    – Kusalananda
    Dec 4 at 11:39














up vote
0
down vote

favorite












I am trying to write a dd migration script that will do the following:



  1. read user input (max=4) into an array, called "array". the user will enter the logical volume names to be migrated.

  2. once each element is stored on an array, run:

/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"’



  1. spawn multiple ssh connections to migrate each logical volume via dd to a specific host, the IP of which is also entered by user and stored in a variable.

I currently have:



#!/bin/bash

echo "Enter upto 4 SRVID's seperated by a space"


while read SRVIDS
do


[ "$SRVIDS" == "done" ] && break
array=("$array[@]" $SRVIDS)

done



/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"' 2&>1


What am I doing wrong? I am unable to get grep for the logical volume paths.










share|improve this question



















  • 1




    Variables/arays names are not expanded under single quotes, you need to remove them. Also add $ in front of their names.
    – jimmij
    Dec 4 at 5:14











  • Getting the volume names on the command line would make the script more flexible.
    – Kusalananda
    Dec 4 at 11:39












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I am trying to write a dd migration script that will do the following:



  1. read user input (max=4) into an array, called "array". the user will enter the logical volume names to be migrated.

  2. once each element is stored on an array, run:

/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"’



  1. spawn multiple ssh connections to migrate each logical volume via dd to a specific host, the IP of which is also entered by user and stored in a variable.

I currently have:



#!/bin/bash

echo "Enter upto 4 SRVID's seperated by a space"


while read SRVIDS
do


[ "$SRVIDS" == "done" ] && break
array=("$array[@]" $SRVIDS)

done



/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"' 2&>1


What am I doing wrong? I am unable to get grep for the logical volume paths.










share|improve this question















I am trying to write a dd migration script that will do the following:



  1. read user input (max=4) into an array, called "array". the user will enter the logical volume names to be migrated.

  2. once each element is stored on an array, run:

/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"’



  1. spawn multiple ssh connections to migrate each logical volume via dd to a specific host, the IP of which is also entered by user and stored in a variable.

I currently have:



#!/bin/bash

echo "Enter upto 4 SRVID's seperated by a space"


while read SRVIDS
do


[ "$SRVIDS" == "done" ] && break
array=("$array[@]" $SRVIDS)

done



/sbin/lvscan | grep -E '"array[0]"|"array[1]"|"array[2]"|"array[3]"' 2&>1


What am I doing wrong? I am unable to get grep for the logical volume paths.







shell-script dd array






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 4 at 3:02









Peschke

2,400924




2,400924










asked Dec 4 at 2:07









Ertugrul Dur

63




63







  • 1




    Variables/arays names are not expanded under single quotes, you need to remove them. Also add $ in front of their names.
    – jimmij
    Dec 4 at 5:14











  • Getting the volume names on the command line would make the script more flexible.
    – Kusalananda
    Dec 4 at 11:39












  • 1




    Variables/arays names are not expanded under single quotes, you need to remove them. Also add $ in front of their names.
    – jimmij
    Dec 4 at 5:14











  • Getting the volume names on the command line would make the script more flexible.
    – Kusalananda
    Dec 4 at 11:39







1




1




Variables/arays names are not expanded under single quotes, you need to remove them. Also add $ in front of their names.
– jimmij
Dec 4 at 5:14





Variables/arays names are not expanded under single quotes, you need to remove them. Also add $ in front of their names.
– jimmij
Dec 4 at 5:14













Getting the volume names on the command line would make the script more flexible.
– Kusalananda
Dec 4 at 11:39




Getting the volume names on the command line would make the script more flexible.
– Kusalananda
Dec 4 at 11:39










1 Answer
1






active

oldest

votes

















up vote
1
down vote













No need to list ALL the array elements; try:



IFS="|"
grep -E "$array[*]"


Don't forget to save old IFS and then restore it...






share|improve this answer




















  • ... or do it in a subshell.
    – Kusalananda
    Dec 4 at 12:33










Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f485801%2fgrep-for-multiple-elements-of-an-array%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote













No need to list ALL the array elements; try:



IFS="|"
grep -E "$array[*]"


Don't forget to save old IFS and then restore it...






share|improve this answer




















  • ... or do it in a subshell.
    – Kusalananda
    Dec 4 at 12:33














up vote
1
down vote













No need to list ALL the array elements; try:



IFS="|"
grep -E "$array[*]"


Don't forget to save old IFS and then restore it...






share|improve this answer




















  • ... or do it in a subshell.
    – Kusalananda
    Dec 4 at 12:33












up vote
1
down vote










up vote
1
down vote









No need to list ALL the array elements; try:



IFS="|"
grep -E "$array[*]"


Don't forget to save old IFS and then restore it...






share|improve this answer












No need to list ALL the array elements; try:



IFS="|"
grep -E "$array[*]"


Don't forget to save old IFS and then restore it...







share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 4 at 11:35









RudiC

3,8381312




3,8381312











  • ... or do it in a subshell.
    – Kusalananda
    Dec 4 at 12:33
















  • ... or do it in a subshell.
    – Kusalananda
    Dec 4 at 12:33















... or do it in a subshell.
– Kusalananda
Dec 4 at 12:33




... or do it in a subshell.
– Kusalananda
Dec 4 at 12:33

















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f485801%2fgrep-for-multiple-elements-of-an-array%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?