coko12016/11/09 03:32if [ $VAL -eq 0 ];then の行で unary operator expected とエラーが表示されました。 分岐自体は行なわれているのですが、このエラーはなんでしょうか?
coko12016/11/09 06:051行目 : #!/bin/bash: No such file or directory if [ $VAL -eq 0 ];then の行 :[: $VAL: integer expression expectedと表示されてしまいました。
ynakano2016/11/09 06:091行目、「#!」の後はbashのフルパスを記載してください。 which bashで探せると思います。 if分のところは以下のようにしてみてください。 if [ "$VAL" -eq 0 ];then
ynakano2016/11/09 06:13あ、ごめんなさい。bashではなかったんですね。 1行目は「#!/bin/sh」でも大丈夫です。 ※一応shでもダブルクォートなしで試しましたが、やっぱりエラーは再現しなかったです。 先ほどとエラーメッセージが変わったようですね。 引き続きやってみてダメならスクリプトを見せていただければと思います。
coko12016/11/09 06:361行目に関してはシェルを作成するタイミングでBOM付きで作成してしまっているためにおこるようです。 [: $VAL: integer expression expected はかわらないですね... #!/bin/sh echo 'コピーを開始します' cp -p VAL=`expr $VAL + $?` -v コピー元 コピー先 ←存在しないファイル cp -p VAL=`expr $VAL + $?` -v コピー元 コピー先 ←存在しないファイル cp -p VAL=`expr $VAL + $?` -v コピー元 コピー先 ←存在しないファイル if [ "$VAL" -eq 0 ];then echo 'コピーが完了しました' else echo 'コピーに失敗しました' fi
ynakano2016/11/09 06:42私の書き方が悪かったのでしょうか… 正しくは以下です。 ------------------------------------------- VAL=0 cp -p -v コピー元 コピー先 VAL=`expr $VAL + $?` cp -p -v コピー元 コピー先 VAL=`expr $VAL + $?` cp -p -v コピー元 コピー先 VAL=`expr $VAL + $?` ------------------------------------------- ※最初にVALを初期化しておきました。
coko12016/11/09 06:55 編集出来ました、ありがとうございます。 cp -pの直後と書いてあったので勘違いをしてしまっていました。 1つお聞きしたいのですが $? というのは直前のコマンドの結果を(true,false)1または0で格納されているという認識であっているのでしょうか?
ynakano2016/11/09 07:07「直前の」コマンドの戻り値が$?に格納される、という認識は合っています。 取り得る値は0~255ですが、Unix/Linuxのルールとして「正常終了したら0、正常終了でない場合は0以外」です。 0以外についてはエラーの理由ごとに戻り値を複数設定されている場合もありますが、どのような値にするかは実装次第です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/09 02:53
2016/11/09 03:32
2016/11/09 03:40
2016/11/09 06:05
2016/11/09 06:09
2016/11/09 06:13
2016/11/09 06:36
2016/11/09 06:42
2016/11/09 06:55 編集
2016/11/09 07:07
2016/11/09 07:11