私は単純なbashスクリプトを書いています。マイスクリプトのインストールポリアニリン。問題は、2つのパラメータを追加できないことです。私は次のように簡単なものを書きたいと思います。
./ppa.sh -i ppa:chris-lea/node.js nodejs
これを試しましたが、2番目のパラメータ「nodejs」を読み取れませんでした...
#! /bin/sh
# Install/add PPA or Program
while getopts ":i:e:" option;
do
case $option in
i)
echo received -i with $OPTARG
ang='sudo apt-add-repository'
;;
e)
echo received -e with $OPTARG
ang='other line'
;;
:)
echo "option -$OPTARG needs an argument"
exit
;;
*)
echo "invalid option -$OPTARG"
exit
;;
esac
# done
if [ "`echo $OPTARG | cut -d ':' -f1`" == "ppa" ]; then
echo 'is a ppa'
$ang $OPTARG ; sleep 2s && sudo apt-get update; clear
sudo apt-get -y install $OPTARG2
fi
done
答え1
インストールを意味し、2つの引数が必要であると仮定すると、getoptsブロックにフラグを設定し、オプションの処理-i
後に残りの引数をリポジトリとパッケージとして処理する方が簡単になります。-i
while getopts ":i" option; do
case "$option" in
i)
mode=install
;;
esac
done
shift $((OPTIND - 1))
case "$mode" in
install)
apt-add-repository "$1"
apt-get update
apt-get install "$2"
shift 2
;;
esac
または、PPAとパッケージのリストを取得することがアイデアである場合は、そうする必要がある理由がたくさんあります。
case "$mode" in
install)
for arg in "$@"; do
case "$arg" in
ppa:*)
apt-add-repository "$arg"
apt-get update
;;
*)
apt-get install "$arg"
;;
esac
done
;;
esac
答え2
両方のパラメータを引用符または二重引用符で囲む必要があります。
% ./ppa.sh -i 'ppa:chris-lea/node.js nodejs'
received -i with ppa:chris-lea/node.js nodejs