0

これは、ファイルを列でソートする私の bash スクリプトです。

while getopts "123456" flag

do
sort -t: -k $flag names.txt

done

今のところ、必要なことは正確に実行されますが、ファイル名もパラメーターにする必要があります。

現在の入力は ./sortScrpt -2 です。

入力が ./sortScript -2 names.txt のようになる必要があります

どんな助けでも素晴らしいでしょう。ありがとう

4

4 に答える 4

2

bash スクリプトを次のように変更します。

while getopts "123456" flag

do
sort -t: -k $flag "${2}"

done

2 番目のパラメーターに「${2}」を使用できるパラメーターの取得

于 2013-02-19T13:37:33.057 に答える
1

複数のソートパラメータが必要な場合は、スクリプトを次のように更新できます。

#first parse -f fname    
getopts "f:" f
fname=$OPTARG

while getopts "123456" flag

do
    sort -t: -k $flag $fname
done

このスクリプトは次のように実行できます

$ ./script.sh -f names.txt -2 

または複数の種類の場合

$ ./script.sh -f names.txt -2 -3 
于 2013-02-19T13:50:16.200 に答える
1

始めるための何か:

#!/bin/bash

while getopts ":2:" opt; do
  case $opt in
    2)
      echo "-2 was triggered, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

出力:

$ ./a.sh -2 names.txt
-2 was triggered, Parameter: names.txt
于 2013-02-19T13:38:25.143 に答える
0

「sort-arg then file」要件 + エラーチェック用に改訂された編集:

#!/bin/bash

sflag=""
sfile=""

while getopts "123456" flag
do
        [ -z "$sflag" ] && sflag="$flag"
done
shift $(($OPTIND - 1))
sfile="$1"

if [[ "$sflag" ]] && [[ "$sfile" ]];
then
    sort -t: -k $sflag $sfile
else
    # error - bail out
    echo "usage: $0 -[123456] file.txt" >&2
    exit 1
fi

OPTINDは getopts によって設定され、$#+1 (追加のパラメーターがないなど) または getopts フラグに一致しない最初のパラメーターのいずれかを指します。

于 2013-02-19T13:48:01.657 に答える