へ 安全 私たちの コンセプト Bashで完全に機能するプログラミングに非常に役立つ2つのツールを学習します。 作成することを学ぶ funciones そして定義する パイプ 最初は複雑に見えるかもしれませんが、それから私たちは巨大なものを見るでしょう utilidad 彼らが私たちに提供すること。 |
パイプ
具体的には、パイプラインは、あるプロセスの出力を別のプロセスの入力として指示できる方法です。これにより、コード行の削減、結果のストレージ変数の不要化、改善などの一連の利点が得られます。スクリプトの効率。
パイプは通常、記号|を付けることで認識されます。 これにより、式を連結できます。 デフォルトで使用されますが、パイプを作成する方法は他にもあります。
例:最近のカーネルメッセージを出力する
#dmesgを使用すると、システムの起動中に最近のカーネルメッセージとロードされたドライバを確認できます。 tailは、ファイルまたは#commandの最後の部分を出力します
dmesg | 尾
必要に応じて複雑にすることができますが、パイプラインの基本構造により、あるコマンドの結果を次のコマンドへの入力として使用できます。これにより、連続するパイプを追加し続けると、新しいコマンドの入力を提供できます。
機能
関数は、書き直さなくても複数回実行できるようにグループ化されたステートメントのセットです。 ある種の食べ物を調理することを学ぶとき、そのレシピをシートに書き、その食べ物を調理したいときはいつも、同じレシピで新しいシートを書き直すのではなく、レシピを調べると考えるのと同じです。
おそらく、関数に関して最も重要なことは、パラメーター、つまりパラメーターを処理して出力を生成するために使用するデータを渡す可能性です。 その構造は次のとおりです。
関数関数名{
プロセス
}
例:tcpプロトコルで動作するサービスを表示する関数。 さらにパイプを適用する方法もわかります。
#関数名を定義します。好きな名前にすることができます。
関数services_tcp {
#catは、/ etc / servicesフォルダーの内容を連結して表示します。これは、関連するポートを持つすべてのサービスを含む#です。
#最初のgrepはリストを取得してコメントを削除し、–vを使用して結果を反転します
#XNUMX番目のgrepは、tcpに関連するもののみを表示します
猫/その他/サービス| grep –v "^#" | grep tcp
}
この関数を実行する必要があるときは、名前で呼び出す必要があります。
tcp_services
この場合、パラメーターなしで機能します。 それらがある場合は、関数が正しく機能するように追加する必要があります。そうしないと、関数が正しく動作しません。 returnを使用すると、関数はプロセスの結果として値を返すことができます。
例:2つの数値の合計を計算する入力パラメーターを持つ関数。
#!/ bin / bashに
関数sum()
{
#引用符内で操作を実行できるようにします
「結果= $ 1 + $ 2」
#returnを使用すると、整数値を返すことができます。 リターンが実行されると、値は変数$?内に格納されます。
$結果を返します。
}
#sum関数が呼び出され、2つの入力パラメーターを渡します。
2を追加
#$の値を出力しますか? 引用符で囲まれた変数の実際の値を評価するエコーを使用
echo -e "結果= $?";
よくわかりませんが、関数のreturnステートメントは、「exit」のエラーコードのように、0〜255の整数を返すためにのみ使用されます。通常、すべてが正常な場合は0、その他の場合は別の数値です。 これは例では機能しますが、結果をreturnで返すのは良い習慣ではないと思います。
あそこに私はナンセンスハァッと言っています! 眼! ハ!
真実は私に疑いを残しました。 いずれにせよ、関数の問題を回避するために、関数が値または文字列を返すか出力しようとする場合に、returnをechoに置き換えることができます。
確かに、これを解決するには、bcコマンドを使用できます。sum関数では、次のように使用できます。result= `echo $ 1 + $ 2 | bc -ql`
良いです、
bashファイルをどこに保存してシステム全体で実行できるかを知りたいのですが、それはbinディレクトリではありませんが、バックアップ用のホームにできます。
おかげで、よろしくお願いいたします。
どうもありがとうございました、私はスクリプトから始めています、そして真実はこれが非常に有用であるということです、あなたはあなたの知識を共有するのにとても親切です!
よろしく
ありがとうございました! 抱擁!
パブロ
構文エラー: "("予期しない
例を実行しようとするとエラーが発生します。まったく同じようにコピーしました。
何ができますか? 私はubuntu14.10にいます