blog

運用と保守 SHELL

1. シェルの基本 シェルはオペレーティングシステムとアプリケーション間のコマンド変換ツールです。 フォーカス: 変数値の範囲内でパース可能な変数 A がある場合、まず変数 A をパースし、A の結果...

Aug 4, 2020 · 5 min. read
シェア
  • CI: 継続的インテグレーション

    日々のコードを継続的に統合し、コード全体の実行可能性をテストします。

  • CD: 継続的デリバリー

    ユーザーエクスペリエンスなどのバグフィードバックに基づく継続的なバージョンアップ

shell

スクリプトの基本

シェルは、オペレーティングシステムとアプリケーションの間のコマンド変換ツールです。

  • シェルは、コマンドを一行ずつ実行したり、確認のために一行ずつ実行したり、スクリプトとして実行したりするのに使うことができます。
  • スクリプトは、シェルコマンドをスクリプトファイルに記述し、スクリプトファイルを実行することで実行されます。

スクリプトの指定

Windowsは[.sh]ファイル、Linuxはvi/vimで終了し、スクリプトは上から順にコマンドを実行します。

#!/bin/bash
# これは一時的なシェルスクリプトである
echo 'nihao'
  • スクリプトを実行するパスには主に相対パスと絶対パスがあり、絶対パスは主に仕事で使われます:

bash /path/to/script-name /bin/bash /path/to/script-name

その他の方法もご利用いただけます。

/path/to/script-name		 ./script-name	
source script-name			 . script-name	

shellの変数は

シェルの変数は主にローカル変数、グローバル変数、組み込み変数に分類されます。

  • ローカル変数は、通常の変数とコマンド変数に分けられます。

    • ローカル変数:

    変数名 = "変数値"

     フォーカス: 変数値の範囲内でパースできる変数Aがある場合、まず変数Aをパースし、Aの結果と他の内容を組み合わせて全体にし、その値を変数Bに再代入する。数値は引用符で囲まず、他のデフォルトは二重引用符で囲む。
    
    • コマンド変数:

    変数名 = $

    プロセスを実行します:

     1 $()スコープ付きコマンド
     2コマンドの結果は新しい変数名Aに代入される。
    
  • グローバル変数:

    エクスポート変数=値

    envで全てのグローバル変数を表示することもできますし、env | grepでグローバル変数を表示することもできます。

  • 組み込み変数

$0現在実行中のシェル・スクリプト・ファイル名(スクリプト・パスを含む)を取得します。
$nn=1...9、nが0の場合はスクリプトのファイル名を意味し、nが9より大きい場合は中括弧${10}で囲む必要があります。
$#現在のシェルコマンドラインの引数の総数を取得します。
$?最後に実行された命令の戻り値を取得
  • 変数の表示と変数のキャンセル

    • 変数の表示

    "${変数名}"

    二重引用符が外側にある場合 echo " dsa dsafsa dsafsa ${変数名} f "

    • アンセット変数:変数名のアンセット

文字列のインターセプトとデフォルト値

  • 文字列インターセプトのフォーマット:${変数名:開始位置:長さ}。
 
${file:0:5}		最初の文字から始まり、5文字をインターセプトする。
${file::5}			最初の文字から始まり、5文字をインターセプトする。
${file:5:5}		6文字目から、5文字を割り込む。
${file:5}			6文字目から、以下のすべての文字をインターセプトする。
${file:0-5}		5文字目から、以下のすべての文字をインターセプトする。
${file:0-6:3}		6文字目から、次の3文字をインターセプトする。
  • デフォルト値の形式:变量名:默认值-変数名:-デフォルト値または{変数名:+デフォルト値}。
 #!/bin/bash
	# パッケージ選択デモ
	a="$1"
	echo "選択したパッケージは次のとおりである。${a:-1}"
 
 実行結果:デフォルトの出力パッケージ1にパラメータなし、パラメータでパッケージ数を出力する
  • 変数名:-デフォルト}。

    変数aが内容を持つ場合、変数aの値を出力します。

    変数aに内容がない場合、デフォルトの内容が出力されます。

 #!/bin/bash
	# 結婚年齢選択デモ
	a="$1"
	echo "結婚適齢期は${a:+22}"
  • 変数名:+デフォルト値}。

    a が値を持つかどうかに関係なく、デフォルトの内容を出力します。

shell

テスト文

  • test 条件式
  • [条件式 ]の場合、中括弧の両側にはスペースを入れなければなりません。

論理式

  • オーダー1 & & オーダー2

    コマンド1が成功したら、コマンド2を実行します。

    コマンド1の実行に失敗した場合、コマンド2も実行されません。

  • コマンド1|コマンド2

    コマンド1が正常に実行された場合、コマンド2は実行されません。

    コマンド1の実行に失敗した場合は、コマンド2が実行されます。

ファイル式

  • -入力がファイルかどうかを判断します。

# [ -f weizhi.sh ] && echo "はファイル"
はファイル
# [ -f weizhi.sddh ] || echo "ファイルではない"
  • -d 入力がディレクトリかどうかを判断します。
  • -入力が実行可能かどうかを判断します。

数値演算子

n1-eq n2 イコール

n1-gt n2 より大きい

n1 -lt n2 以下

n1 -ne n2 は以下と等しくありません。

  • 文字列の比較

str1 == str2 str1とstr2の文字列は同じです。

str1 != str2 str1とstr2の文字列は同じ内容ではありません!はその逆を意味します。

if

文法形式:

if [ 条件]
then
 	 
elif [ 条件2]
then
 	 
else
 	 
fi

case

文法形式:

case 変数名
  
  
 ;;
  
  
 ;;
  
 	  
 ;;
esac
注意
最初の行のキーワードはcase、最後の行のキーワードはesacである。
)を選択する
選択された各実行文の最後にセミコロンを2つ付ける;

case 文は比較的簡潔で、コードが少なく、複数の条件がある場合よりも見やすくなります。

forループ文

文法形式:

#!/bin/bash
# forステートメントの使用例、ファイルをトラバースする
for i in $(ls /root)
do
 echo "${i}"
done

while

文法形式:

while 条件
do
 ステートメントを実行する
done
注意
条件の型:
 [[ 文字列式]]関数の書式:スクリプト関数引数渡し)
条件が満たされている限り、関数は実行し続ける

until

文法形式:

until 条件
do
 ステートメントを実行する
done
注意
条件の型:
 [[ 文字列式]]関数)
ループは条件が満たされない限り続く

複雑なプロセス制御文

機能が複雑なプロセス制御ステートメント

単純な関数

関数形式:

関数名(){
	 
}
	関数を呼び出す:
 
注意: 関数を呼び出さない場合、その関数は実行されない

例: パラメータを渡すスクリプト関数

#!/bin/bash
# 関数渡しのデモンストレーション
# パラメータを渡す関数を定義する
dayin(){
 echo "wode mingzi shi $1"
}
# 関数の受け渡し
dayin $1
Read next

フロントエンド機械学習入門6:複数分類

これまでのノートでは、主に二値分類のロジスティック回帰問題について学びました。しかし、現実には2値分類の問題だけでなく、多値分類の問題も含まれます。例えば、紙に数字が書かれていて、それが0-9のどの数字かを予測したい場合、この問題は多階級化問題であり、0-9の10個の分類があります...

Aug 4, 2020 · 14 min read