名前にスペースがあるオブジェクトを見つけ、各スペースを下線に置き換えるスクリプトを作成しました。オブジェクトタイプは個々のオブジェクトに基づいて選択されます。
あるいは、すべてのオブジェクトタイプをどのように処理できますか?おそらくif-then-elseと内部forループを考えていますか?
#!/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
ベストアンサー1
ユーザーにメニューを表示するには、次の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.
私は仮定する強く打つここで。使用中のシェルでない場合はお知らせください。
配列がないシェルに閉じ込められている場合、オブジェクトは単純な単語であるため、これを行うことができます。
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