Processa um ou vários objetos de uma lista [fechada]

0

Eu escrevi um script que encontrará objetos que contêm espaços no nome e substitui cada espaço por um sublinhado. O tipo de objeto é baseado em uma única seleção de objetos.
Como posso processar todos os tipos de objeto como uma opção alternativa? Eu estava pensando talvez em um if-then-else junto com um loop interno?

#!/bin/sh
printf "Choose object from the list below\n"
printf "**policy**\n**ipadd**r\n**subnet**\n**netmap**\n**netgroup**\n
**host**\n**iprange**\n**zonegroup**\n" | tee object.txt

read object
IFS="'printf '\n\t''"
#   Find all selected object names that contain spaces
cf -TJK name "$object" q | tail -n +3 |sed 's/ *$//' |grep " " >temp
for x in 'cat temp'
do
#   Assign the y variable to the new name
y='printf "$x" | tr ' ' '_''
#   Rename the object using underscores
cf "$object" modify name="$x" newname="$y"
done
    
por Steve 22.03.2018 / 12:16

1 resposta

4

Quando você quiser apresentar um menu ao seu usuário, pense no comando select :

#  Ask the user which object type they would like to rename
objects=( policy netgroup zonegroup host iprange ipaddr subnet netmap )
PS3="Which network object type would you like to edit? "

select object in "${objects[@]}" all; do
    [[ -n "$object" ]] && break
done

if [[ "$object" == "all" ]]; then
    # comma separated list of all objects
    object=$( IFS=,; echo "${objects[*]}" )
fi

cf -TJK name "$object" q | etc etc etc
# ...........^ get into the habit of quoting your variables.

Estou assumindo aqui. Deixe-nos saber se essa não é a casca que você está usando.

Se você estiver preso em um shell sem matrizes, poderá fazer isso, pois os objetos são palavras simples:

objects="policy netgroup zonegroup host iprange ipaddr subnet netmap"
PS3="Which network object type would you like to edit? "

select object in $objects all; do     # $objects is specifically not quoted here ...
    [ -n "$object" ] && break
done

if [ "$object" = "all" ]; then
    object=$( set -- $objects; IFS=,; echo "$*" )        # ... or here
fi

cf -TJK name "$object" q | etc etc etc
    
por 22.03.2018 / 13:44