1

VPS サーバーで /tmp を増やすための bash スクリプトに取り組んでいます。選択したオプションに対して同じコマンドを繰り返す必要なく、よりクリーンで効率的なものにしたいと考えています。現在の構造は次のとおりです。

#!/bin/bash

  showMenu () {
        echo "1) Increase /tmp size to 1 GB"
        echo "2) Increase /tmp size to 2 GB"
        echo "3) Quit"
}
   while [ 1 ]
   do
       showMenu
       read CHOICE
       case "$CHOICE" in

  "1")
       /etc/init.d/mysql stop
       /etc/init.d/httpd stop
       /etc/init.d/cpanel stop
       cp -af /var/tmp /var/tmp.bak
       umount -l /var/tmp
       umount -l /tmp
       rm -f /usr/tmpDSK
       dd if=/dev/zero of=/usr/tmpDSK bs=1M count=1k
       mkfs.ext3 -F /usr/tmpDSK
       mount -t ext3 -o nosuid,noexec,loop /usr/tmpDSK /tmp
       mount -o bind,noexec,nosuid /tmp /var/tmp
       cp -a /var/tmp.bak/* /tmp/
       rm -rf /var/tmp.bak/
       chmod 1777 /tmp
       /etc/init.d/mysql start
       /etc/init.d/httpd start
       /etc/init.d/cpanel start
       df -h
       exit 1
       ;;

    "2")
       /etc/init.d/mysql stop
       /etc/init.d/httpd stop
       /etc/init.d/cpanel stop
       cp -af /var/tmp /var/tmp.bak
       umount -l /var/tmp
       umount -l /tmp
       rm -f /usr/tmpDSK
       dd if=/dev/zero of=/usr/tmpDSK bs=1M count=2k
       mkfs.ext3 -F /usr/tmpDSK
       mount -t ext3 -o nosuid,noexec,loop /usr/tmpDSK /tmp
       mount -o bind,noexec,nosuid /tmp /var/tmp
       cp -a /var/tmp.bak/* /tmp/
       rm -rf /var/tmp.bak/
       chmod 1777 /tmp
       /etc/init.d/mysql start
       /etc/init.d/httpd start
       /etc/init.d/cpanel start
       df -h
       exit 1
       ;;

    "3")
        exit 1
       ;;
      esac
    done

基本的に、このプロセス中に冗長コマンドを 1 回だけ開始したいと考えています。これを行うための最良の方法についてのアイデアを教えてください。

ありがとう。

4

4 に答える 4

2

にぴったりのようですねbash function。コードの中身を関数に入れてから、サイズのパラメーターを渡します。

于 2012-07-06T20:13:58.657 に答える
1

これが関数の目的です。共通コードを関数に入れ、適切なcase 選択から呼び出します。別の方法は、ステートメントにフラグを設定caseし、フラグに基づいて条件付き実行を行うことです。

于 2012-07-06T20:14:48.030 に答える
1
#!/bin/bash

function size_up {
           /etc/init.d/mysql stop
           /etc/init.d/httpd stop
           /etc/init.d/cpanel stop
           cp -af /var/tmp /var/tmp.bak
           umount -l /var/tmp
           umount -l /tmp
           rm -f /usr/tmpDSK
           dd if=/dev/zero of=/usr/tmpDSK bs=1M count=${1}k
           mkfs.ext3 -F /usr/tmpDSK
           mount -t ext3 -o nosuid,noexec,loop /usr/tmpDSK /tmp
           mount -o bind,noexec,nosuid /tmp /var/tmp
           cp -a /var/tmp.bak/* /tmp/
           rm -rf /var/tmp.bak/
           chmod 1777 /tmp
           /etc/init.d/mysql start
           /etc/init.d/httpd start
           /etc/init.d/cpanel start
           df -h
           exit 1
           ;;
}



function showMenu () {
        echo "1) Increase /tmp size to 1 GB"
        echo "2) Increase /tmp size to 2 GB"
        echo "3) Quit"
}
 while [ 1 ]
   do
    showMenu
    read CHOICE
    case "$CHOICE" in
       "1") size_up 1
       "2") size_up 2
       "3") exit 1
       ;;
    esac
done
于 2012-07-06T20:15:38.013 に答える
0

bash 関数は少し変わっていることに注意してください。

function abc
{
   global_var=1
}

function def
(
   local_var=1
)

中括弧と括弧に注意してください。括弧を使用すると、関数はサブシェルで実行されますが、中括弧を使用すると、関数は一意の名前空間を取得しません!

于 2012-07-06T23:20:22.040 に答える