関数本体では、 $1 、 $2 、... を使用してこれらのパラメーターを呼び出すことができます。また、 $@、 $*、 $# などの特殊変数も使用できます。 例: 10 人のユーザーを追加する
ローカル変数:現在のシェル プロセス; スクリプトを実行するために、専用のシェル プロセスが開始されます。したがって、ローカル変数のスコープは現在のシェル スクリプト ファイルです。関数が終了すると自動的に破棄されます。
Start: サービス名 start ==> systemctl start name.service
Stop: サービス名 stop ==> systemctl stop name.service
Restart: サービス名 restart ==> name.service
status: サービス名 status ==> systemctl status name.service
条件付き再起動: サービス名 condrestart ==> systemctl try-restart name.service
reload またはサービスを再起動します。 systemctl reload-or-restart name.service
サービスをリロードまたは条件付きで再起動します: systemctl reload-or-try-restart name.service
起動時に自動的に開始する設定を禁止します: systemctl マスク名 .service
禁止を解除し、起動時に自動的に開始するように設定します: systemctl unmask name.service
現在サービスがアクティブ化されているかどうかのステータスを表示します: systemctl is-active name.service
アクティブ化されたすべてのサービスを表示:
systemctl list-units --type service
すべてのサービスを表示:
systemctl list-units --type service --all
chkconfig コマンド:
起動時にサービスを自動的に開始するように設定します: chkconfig name on ==> systemctl enable name.service
Disable: chkconfig name off ==> systemctl disable name.service
すべてのサービスの自動起動ステータス:
chkconfig --list ==> systemctl list-unit-files --type service
起動時にサービスが自動的に起動するかどうかを確認します: systemctl is-enabled name.service
その他のコマンド:
サービス依存関係の表示: systemctl list-dependency name.service
ターゲットユニット:
ユニット構成ファイル:ゲット
ランレベル:
0 ==> runlevel0.target、poweroff.target
1 ==> runlevel1.target、rescue.target
2 ==> user.target
3 ==> runlevel3.target、multi-user.target
4 ==> runlevel4.target、multi-user.target
5 ==> 、graphical.target
6 ==> runlevel6.target、reboot.target
レベル切り替え:
init N ==> レベルの表示:
runlevel ==> systemctl list-units --type target
デフォルトのランレベルの取得:
/etc/inittab ==> systemctl get-default
デフォルトレベルを変更します:
/etc/inittab ==> systemctl set-default name.target
緊急レスキューモードに切り替えます:
systemctlレスキュー
緊急モードに切り替える:
systemctlEmergency
その他の一般的なコマンド:
シャットダウン: systemctl halt、systemctl poweroff
reboot: systemctl reboot
ハング: systemctl stop
スナップショット: systemctl hibernate
スナップショットとサスペンド: systemctl hybrid-sleep
レビュー: bash スクリプト、systemd
関数: モジュラープログラミング
function f_name {
...関数本体...
}
f_name() {
...機能本体...
}
return コマンド;
パラメータ:
関数本体のパラメータを呼び出す: $1, $2, ...
$*, $@ , $#
関数にパラメータを渡します:
関数名パラメータリスト
systemd: システムとサービス
unit:
Type: サービス、ターゲット
.Service、.target
SystemCTL
bash スクリプト プログラミング:
配列:
変数: 単一要素のメモリ空間を格納します。複数の要素を保存する複数の要素の連続メモリ空間。
配列名
インデックス: 数値は 0 から始まり、数値インデックスです。
注: インデックスは数値だけでなくカスタム形式の使用もサポートします。形式;
bash の配列は、
配列内の要素を参照します: ${ARRAY_NAME[INDEX]}
配列を宣言します:
-a ARRAY_N AME を宣言します
宣言 -A ARRAY_NAME: 連想配列;
配列要素の割り当て:
(1)
ARRAY_NAME[INDEX]=VALUE
weekdays[ 0] ="Sunday"
weekdays[4]="木曜日"
(2) すべての要素を一度に割り当てます:
ARRAY_NAME=("VAL1" "VAL2" "VAL3) " ...)
(3) 特定の要素のみを割り当てます:
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
(4) 読み取り-a ARRAY
配列要素の参照: ${ARRAY_NAME[INDEX]}
注: [INDEX] を省略すると、添え字 0 を持つ要素を参照することになります
配列の長さ (配列内の要素の数): ${#ARRAY_NAME[*]}、${#ARRAY_NAME[@]}
例: 10 個の乱数を生成して配列に保存し、その最大値と最小値;
# !/bin/bash
#
declare -a rand
declare -i max=0
9 }; do
rand [$i]=$RANDOM
echo ${rand[$i]}
[ ${rand[$i]} -gt $max ] && max=$ {rand[$i]}
done
echo "Max: $max"
配列を定義します。配列内の要素はすべて で終わるファイルです。 /var/log ディレクトリにログインします。 添字が偶数であるファイルの行数の合計をカウントするには、
#!/bin/bash
#
declare -a files
files=(/var /log/*.log)
declare -i Lines=0
for i in $(seq 0 $[${#files[*]} -1]);
if [ $[$i%2] -eq 0 ];then
let Lines+=$(wc -l ${files[$i]} | Cut -d' ' -f1)
Fi
done
echo "Lines: $lines."
配列内の参照要素:
すべての要素: ${AR RAY [@]} , ${ARRAY[*]}
配列のスライス: ${ARRAY[@]:offset:number}
offset: スキップされる要素の数
number: スキップされる要素数値を取得し、オフセット後のすべての要素を取得します: ${ARRAY[@]:offset}; 要素を配列に追加します:
ARRAY[${#ARRAY[*]}]
配列内の要素を削除します:
unset ARRAY[INDEX]
連想配列:
declare -A ARRAY_NAME
ARRAY_NAME=([インデックス名1]=' val1' [index_name2]='val2' ...)
bashの文字列処理ツール:
文字列スライス:
${var:offset:number}
文字列の右端の文字を取得します: ${var: -lengh}
注: コロンの後には空白文字が必要です
パターンに基づいて部分文字列を取得します:
${var#*word}: word には指定された任意の文字を指定できます。関数: var 変数に格納された文字列内で最初に出現した word を左から右に検索し、先頭から最初の単語を削除します。
${var##*word}: 上記と同じですが、削除されるのは、文字列の先頭と word で指定された最後の文字の間のすべてです。
file="/var/log/messages"
${file##*/}: メッセージ
${var%word*}: ここで、word は指定された任意の文字です。 function : 右から左に、var 変数に格納された文字列内で最初に出現した word を検索し、文字列の最後の文字と最初に出現した word の間のすべての文字を削除します。
file= "/var/ log/messages"
${file%/*}: /var/log
${var%%word*}: 文字列の右端の部分が削除されることを除いて、上記と同じです。左から単語文字の最後の出現の間のすべての文字: url=:80
${url##*:}
${url%%:* }
検索と置換:
${var/pattern/substi}: var で表される文字列内で pattern に一致する最初の文字列を検索し、それを
${var //pattern/substi}: var で表される文字列内の pattern に一致するすべての文字列を検索し、それらを substi に置き換えます
${var/#pattern /substi}: に一致する文字列を検索します。 var で表される文字列の行の先頭にある pattern を検索し、それを substi に置き換えます
${var/%pattern/substi}: var で表される文字列を検索し、末尾の pattern に一致する文字列を置き換えます。 substi を含む行の
を検索して削除します:
${var/pattern}: var で表される文字列を検索し、pattern に一致する文字列を 1 回削除します
${var/ /pattern}:
${var/#pattern}:
${var/%pattern}:
大文字と小文字の変換:
${var^^}: 変換var 内のすべての小文字を大文字に変換します。
${var,,}: var 内のすべての大文字を小文字に変換します。
変数の割り当て:
${var:-value}: var が空であるか設定されていない場合は、戻ります。 value; それ以外の場合は、var の値を返します。
${var:=value}: var が空であるか設定されていない場合は、value を返し、それ以外の場合は var の値を返します。
${var:+value}: var が空でない場合は値を返します。
${var:?error_info}: var が空であるか設定されていない場合は error_info を返し、それ以外の場合は値を返します。 var;
スクリプト プログラムの設定ファイルを使用します:
(1) テキスト ファイルを定義し、各行に "name=value" を定義します
(2) これをスクリプト ファイルのみ
コマンド:
mktemp コマンド:
mktemp [OPTION]... [TEMPLATE]
TEMPLATE: filename.XXX
XXX 少なくとも 3 つ出現するそれぞれ;
オプション:
--tmpdir=/PATH/TO/SOMEDIR: 一時ファイルディレクトリの場所を指定します。 :
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE。 ..
[オプション]をインストール... -d DIRECTORY...
オプション:
-m MODE
-o OWNER
- g GROUP
GNU awk:
テキスト処理用の 3 つのツール: grep、sed、awk
grep、egrep、fgrep: テキスト フィルタリング ツール。
sed: ラインエディター
パターンスペース、ホールドスペース
awk: レポートジェネレーター、フォーマットされたテキスト出力
AWK: Aho、Weinberger、Kernighan --> 新しい AWK、NAWK
GNU awk、gawk
gawk - パターンスキャンおよび処理言語
基本的な使用法: gawk [オプション] 'プログラム' FILE ...
プログラム:声明文}
ステートメントはセミコロンで区切ります
print、printf
オプション:
-F: 入力時に使用するフィールド区切り文字を指定します。
V-V VAR = 値: カスタム変数;
1, Print
print item1, item2, ...
(1) カンマ区切り文字
(2)各出力項目は、現在のレコードのフィールド、変数、または数値です。
(3) 項目が省略された場合は、 $0 を出力するのと同等です。 2. 変数
2.1 組み込み変数
FS: 入力フィールドの区切り文字、デフォルトは空白文字です。
OFS: 出力フィールドの区切り文字、デフォルトは空白文字です。
RS: 入力レコード区切り文字、入力時の改行文字;
ORS: 出力レコード区切り文字、出力時の改行文字
NF: フィールドの数、フィールドの数
{ print NF}、{print $NF}
NR: レコード数、行数;
FNR: 各ファイルの行数をカウントします。
ARGC: コマンドラインパラメータの数;
ARGV: コマンドラインで指定されたパラメータを保存する配列
2.2 カスタム変数
(1) -v var=value
変数名は大文字と小文字が区別されます。
(2) プログラム内で
3 を直接定義します。
化出力: printf FORMAT、item1、item2、...
(1) FORMAT を指定する必要があります。
(2) 自動的に折り返されず、改行制御文字 n
を明示的に指定する必要があります。
(3) FORMAT では、後続の各項目に書式設定記号を指定する必要があります。
%c: 文字の ASCII コードを表示します。 , %i: 10 進整数を表示します。科学表記法での値、または浮動小数点形式で数値を表示します。
%u: % 自体を表示します。修飾子:
#[.#]: 最初の数値は表示の幅を制御します; 2 番目の # は小数点以下の精度を示します
%3.1f
-: 左揃え
+: 数値を表示 記号
4、演算子
算術演算子:
x+y、x-y、x*y、x/y、x^y、x %y
-x
+x: 数値に変換します。
文字列演算子: 符号なし演算子、文字列連結
代入演算子:
=、+ =、-=、*=、/=、%=、^=
++、--
比較演算子:
>、>=、<、< =、!=、==
パターンマッチング演算子:
~: 一致するかどうか
!~: 一致しないかどうか
論理演算子:
&&
||
!
関数呼び出し:
function_name(argu1, argu2, ...)
Cond条件式:
セレクター? if-true-expression:if-false-expression
# awk -F: '{$3>=1000?usertype="共通ユーザー":usertype="Sysadmin または SysUser";printf "% 15s: %-sn",$1,usertype}' /etc/passwd
5, PATTERN
(1) 空: 空のパターン、すべての行に一致;
(2) /normal式/: ここではパターンと一致する行のみを処理します。
(3) 関係式: 結果は「true」または「false」になります。結果が「true」の場合にのみ処理されます。 value、空でない文字列;
(4) line ranges: line ranges,
startline, endline:/pat1/,/pat2/
注: 数値を直接与える形式はサポートされていません
~] # awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END モード
BEGIN{ }: ファイルの処理を開始します。テキストの前に 1 回だけ実行されます。
6. 共通のアクション
(1)式
(2) 制御ステートメント: if、while など;
(3) 複合ステートメント: 組み合わせステートメント
(4) 入力ステートメント
(5) 出力ステートメント
7. 制御ステートメント
if(条件) {ステートメント}
if(条件) {ステートメント} else {ステートメント}
while(条件) {ステートメント}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
Continue
delete array[index]
配列を削除
終了
{ ステートメント }
7.1 if-else
構文: if (条件) ステートメント [else ステートメント]
~]# awk - F: '{if($3>= 1000) {printf "共通ユーザー: %sn",$1} else {printf "root または Sysuser: %sn",$1}}' /etc/passwd
~]# awk -F: '{if ($NF=="/bin/bash") print $1}' /etc/passwd
~]# awk '{if(NF>5) print $0 }' /etc/fstab
~]# df -h | awk -F[%] '/^/dev/{print $1}' awk '{if($NF>=20) print $1 }'
使用シナリオ: awk で取得した行全体または特定のフィールドに対して条件判定を行う
7.2 while ループ
文法: while (条件) 文
条件 "true"、ループに入ります; 条件 "false" 、ループを終了します;
使用シナリオ: 複数のフィールドを 1 つずつ処理する場合に使用され、配列内の各要素を 1 つずつ処理する場合に使用されます。 1 つずつ;
~]# awk '/ ^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); }}' /etc/grub2.cfg
~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($ i)>=7) {print $i,length($ i)}; i++}}' /etc/grub2.cfg
7.3 do-while ループ
構文: do ステートメント while(条件)
意味: ループ本体を少なくとも 1 回実行する
~ ]# awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg
特別な使用法:
は配列内の要素を走査できます
構文: for (var in array) {ボディ用}
7.5 switch ステートメント
構文: switch(expression) {case VALUE1 または /REGEXP/: ステートメント; case VALUE2 または /REGEXP2/: ステートメント}
7.6 Break and continue
break [n]
Continue
7.7 next
この行の処理を早めに終了し、直接次の行に進みます
。
~] # awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd
8, array
連想配列: 配列[index-expression]
index-expression:
(1) 任意の文字列を使用できます。文字列には二重引用符を使用する必要があります。
(2) 配列要素が存在しない場合引用符で囲むと、awk は自動的にこの要素を作成し、その値を「空の文字列」に初期化します。 weekdays[mon]="Monday"
配列内の各要素を反復するには、for(var in array) {for-body}
を使用します。 ~]# awk 'BEGIN{weekdays["mon"]="月曜日";weekdays["tue"]="火曜日";for(i in平日) {print Weekdays[i]}}'
注: var は配列の各インデックスを走査します。 '/^tcp>/{state[$NF]++}END{for(i in state) { print i,state[i]}}'
~]# awk '{ip[$1] ++}END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log
1: /etc/fstab 内の各ファイル システム タイプの統計ファイルの出現回数;
~]# awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab
2: 指定されたファイル内の各単語の出現数をカウントします
~]# awk '{for(i=1;i<=NF;i++){count[$i]+ +}} END{for(i in count) {print i,count[i]}}' /etc/fstab
9, function
9.1 組み込み関数
数値処理:
rand(): 0 から 1 までの乱数を返します。
文字列処理:
length([s]): 指定された文字列の長さを返します。
sub( r,s,[t]): r で表されるパターンを使用して、t で表される文字内の一致するコンテンツを検索し、その最初の出現を s で表されるコンテンツに置き換えます。 , s,[t]): r で表されるパターンを使用して、t で表される文字内の一致するコンテンツを検索し、その出現箇所をすべて s で表されるコンテンツに置き換えます。 ,r]): r を区切り文字として使用して文字 s を切り取り、切り取った結果を a; で表される配列に保存します。 ($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
9.2 カスタマイズ機能
《sedとawk》
DNF 新しい世代の RPM パッケージ マネージャー。これは Fedora 18 で初めて登場しました。
DNF パケット マネージャーは、YUM パケット マネージャーのいくつかの問題を克服し、ユーザー テスト、内部保存、分析への依存を強化しました。
DNF は、RPM、libsolv、および hawkey パッケージを使用してパケット管理操作を実行します。 CentOS および RHEL 7 には事前にインストールされていませんが、YUM を使用しながら DNF を使用できます。
DNF の最新の発行バージョンは 1.0 で、発行日は 2015 年 5 月 11 日です。 このバージョンの DNF パケット管理者 (他の以前のすべてのバージョンを含む) の大部分は Python を使用しており、発行されています。 GPL v2 にすることができます。
YUM の依存関係解決は悪夢であり、SUSE ライブラリ 'libsolv' と Python ラッパーと C Hawkey を使用して DNF で解決されました。
YUM には文書化された API がありません。
新しい機能の構築は困難です。
Python 以外の拡張機能はサポートされていません。
メモリの削減が少なく、メタデータの自動同期が少なく、時間のかかるプロセスです。