echo $(($1 * 2)) の構文を理解してください。

echo $(($1 * 2)) の構文を理解してください。

タスクの基礎として、次のbashスクリプトを使用する必要があります。

#!/bin/bash
lockdir1=/tmp/.myscript.lock1
lockdir2=/tmp/.myscript.lock2

if mkdir "$lockdir1" 2> /dev/null
then
    rm -r "$lockdir1"
    echo $(($1 * 2))
    exit
elif mkdir "$lockdir2" 2> /dev/null
then
    echo $(($1 * 2))
    rm -r "$lockdir2"
    exit
else
    echo "Error"
    rm -r "$lockdir1"
    rm -r "$lockdir2"
    pkill calc.sh
    exit
fi

基本的な機能は、複数の既存のCSVファイルを同時に読み取り、操作し、出力を新しいファイル名で保存することです。マルチスレッドは、セマフォと一緒に使用され、2つのスレッドへの並列アクセスを正確に使用します(この部分はPython 3.7で別々のコードスニペットで書かれています)。

私はそれが何である"$lockdir1"かを知っていると思います。これは絶対パスのプレースホルダのように見え、スクリプトに直接入力すると問題を引き起こす可能性があります。その目的は、操作されるファイルのコピーを保持する一時ディレクトリを作成するようです。

2> /dev/nullエラーメッセージを直接削除してエラーメッセージを抑制するために使用できます。

rm -rまた明確です。ファイル(およびその内容)の操作が成功した後、一時ファイルは削除され、他のスレッドが作業を続行できるようにし、デッドロック(ディレクトリが保持されている場合に発生する可能性がmkdirあります"Error")を防ぎます。

難しい部分は理解することですecho $(($1 * 2))。私はそれが何をしているのか既に知っていると思います。おそらくCSVファイルの内容(それぞれ整列していない100個の数字)を読み、すべての数字を2回コピーします。今まではそんなに良くなった。しかし、構文がどのように機能するのかわかりません。

なぜこのように表現するのですか?どういう意味ですかecho &?下の部分がパラメータとして渡されることを意味しますか?正確にはどういう意味ですか(())?ある種のループがあればもっと理解できますが、これは単なる条件(if/then/else/)です。しかし、私たちの課題では、このスクリプトを使用して各CSVファイルの100個の数字をすべて2倍にする必要があります。

おそらく私の割り当てが間違っているので、ループを直接書く必要があるかもしれませんが(Python 3.7を使用して)構文がどのようにecho $(($1 * 2))機能するかを正確に理解すると、まだ安全であると感じます。

ベストアンサー1

この構文は、$(( [...] ))整数の数学演算を実行するために使用されます。

$ echo $(( 2 + 2 ))
4
$ foo=5
$ echo $(( $foo + 2 ))
7
$ echo $(( $foo / 2 ))
2
$ echo $(( $foo % 2 ))
1

あなたの場合、スクリプトは$1拡張時に最初の引数として評価されることを使用しているので、スクリプトが呼び出されると評価されるので、と./script.sh 43評価$143$(( $1 * 2))ます86

おすすめ記事