あるスクリプトを別のスクリプトとして構成する

あるスクリプトを別のスクリプトとして構成する

以下を実行するスクリプトがある場合

    [alice]$ math
    Enter a number: 5

    Number squared: 25
    Number divided: 1
    Number to power of 3: 125

数学スクリプトの出力をテーブルとして構成しますが、複数の引数を使用して「除数」を表示しない別のスクリプトを作成したいと思います。例えば

   [alice]$ newprogram 5 10

   *
   *Number    squared    power of 3
    5         25         125
    10        100        1000     

また、数学スクリプトは/home/alice新しいプログラムが配置されています/home/user。この問題にどのように対処する必要がありますか?

答え1

私を見て回答既存のスクリプトにパラメータを渡す方法の詳細については、前の質問を参照してください。この出力の解析は、前の出力よりも難しいでしょう。

新しいバージョンをスクリプト化する方がはるかに簡単です。このようにナンセンスを解析することは主なPITAです。

以下は、無関係な出力(ヘッダーなど)を印刷する元のエラーを繰り返すことなくこれを行うバージョンです。

#! /bin/bash

for i in "$@" ;  do
   printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i))
done

-v以下は、(verbose)オプションを使用している場合にオプションでタイトルを印刷するバージョンです。

#! /bin/bash

verbose=0

while getopts "v" opt ; do
  case "$opt" in
      v) verbose=1 ;;
   esac
done

shift "$((OPTIND-1))"

[ "$verbose" = "1" ] && printf "%s\t%s\t%s\n" 'Number' 'Squared' 'Power of 3'

for i in "$@" ;  do
   printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i))
done

答え2

質問で「方法」という言葉を使用しています。これは、与えられた答えが「粗い」または多少「一般的な」ものであることを意味するので、この問題を解決するために使用できる次の手順を説明します。

  • 書く予想される- スクリプト闘うに送信されます/home/alice/math
  • /home/user/newprogram指定されたBASHスクリプトの引数を使用してループからExpectスクリプトを呼び出すBASHスクリプト(例:)を作成するコマンドの置き換え出力をキャプチャします。
  • grep必要なデータを抽出して変数に保存するなど、お気に入りのテキスト処理ツールを使用します(これを行うには、キャプチャされた出力をにパイプする必要があります。コマンド置換を使用してコマンドに渡されgrepたデータをキャプチャしてgrep保存場所に保存する必要があります。 )。変わりやすい)。
  • このステップ前のステップで解析した変数をテーブルに出力します。

このステップではペアがあると仮定します/home/alice/math。もちろんそうでない場合は、次のようにすることができます。

  • /home/alice/mathchmod権限または所有者のみを使用または変更してくださいchown
  • 両方のユーザーがアクセスできるように十分な権限を持つパブリックグループにalice配置します。user/home/alice/math

関連情報