2022/06/10

Shell Script With Optional Arguments

ๆˆ‘ๅ€‘ๅœจๆ“ไฝœ Linux ไธŠ็š„ script ๆ™‚,ๅธธๅธธๆœƒไฝฟ็”จไธ€ไบ› optional arguments,ไพ‹ๅฆ‚:

ls -l
grep -iR --include *.php

ๆˆ‘ๅ€‘่‡ชๅทฑ่ฃฝไฝœ่…ณๆœฌๆ™‚ๅฏไปฅไฝฟ็”จ getopts ไปฅๅŠ shift ้”ๅˆฐ้€™ๆจฃ็š„ๆ•ˆๆžœ,ไปฅไธ€ๅ€‹ๅฎ‰่ฃ็ณป็ตฑ็š„่…ณๆœฌ่ˆ‰ไพ‹。

install.sh

#/bin/bash

install_nginx=0
install_mysql=0
nginx_port=80
mysql_port=3306

while getopts "nmP:p:" OPTION; do
  case "$OPTION" in
  n)
    install_nginx=1
    ;;
  m)
    install_mysql=1
    ;;
  p)
    nginx_port="$OPTARG"
    ;;
  P)
    mysql_port="$OPTARG"
    ;;
  esac
done

echo "Install basic"

if [ "$install_nginx" == 1 ]; then
  echo "Install nginx with port $nginx_port"
fi

if [ "$install_mysql" == 1 ]; then
  echo "Install mysql with port $mysql_port"
fi
bash install.sh

# Install basic

bash install.sh -n

# Install basic
# Install nginx with port 80

bash install.sh -n -p 8888 -m
# Install basic
# Install nginx with port 8888
# Install mysql with port 3306

ไธŠ้ข็š„ๆ–นๆณ•ๅช่ƒฝๅธถๅ…ฅๅ–ฎไธ€ๅญ—็ฌฆ,ๆ‰€ไปฅๅƒๆ˜ฏ port ้€™็จฎๅธธ่ฆ‹ๅ…ฑ็”จ็š„ๆ–‡ๅญ—ๅช่ƒฝ็”จๅคงๅฐๅฏซๆˆ–่€…ไธๅŒๅญ—็ฌฆๅ–ไปฃ,ๅฝˆๆ€งๆฏ”่ผƒๅฐ‘,ไฝฟ็”จ shift ๅฏไปฅ่งฃๆฑบ้€™ๅ€‹ๅ•้กŒ。

#/bin/bash

install_nginx=0
install_mysql=0
nginx_port=80
mysql_port=3306

while [ "$1" != "" ]; do
  case "$1" in
  --nginx)
    install_nginx=1
    ;;
  --nginx-port)
    shift
    nginx_port="$1"
    ;;
  --mysql)
    install_mysql=1
    ;;
  --mysql-port)
    shift
    mysql_port="$1"
    ;;
  esac
  shift
done

echo "Install basic"

if [ "$install_nginx" == 1 ]; then
  echo "Install nginx with port $nginx_port"
fi

if [ "$install_mysql" == 1 ]; then
  echo "Install mysql with port $mysql_port"
fi
bash install.sh --nginx
# Install basic
# Install nginx with port 80

bash install.sh --nginx --nginx-port 8888
# Install basic
# Install nginx with port 8888

bash install.sh --nginx --mysql --mysql-port 3307
# Install basic
# Install nginx with port 80
# Install mysql with port 3307

reference