Linux エンジニアとして、優れたスクリプトを作成できると、作業効率が向上するだけでなく、自分のことを行うための時間を増やすことができます。最近インターネットをサーフィンしているときに、私も注目して偉い人が書いたスクリプトをいくつか集めてまとめました。
(1) ユーザーが数字を推測する
#!/bin/bash
# スクリプトは 100 以内の乱数を生成し、ユーザーの入力に従ってその数値を推測するようユーザーに促し、ユーザーに正しく推測するよう促します。 # ユーザーが正しく推測するまで、小さいか大きいかを推測します
。スクリプトが終了します。
# RANDOM はシステムに付属のシステム変数で、値は 0 ~ 32767 の乱数です。
# 剰余アルゴリズムを使用して、乱数を 1 ~ 100 の乱数に変更します。 num=
$[RANDOM%100+1]
echo "$num"
# read を使用して、ユーザーに数値を推測するように促します。
# if を使用して、ユーザーが推測した数値の大小関係を判断します: -eq (等しい)、-ne (等しくない)、-gt (より大きい)、 -ge (以上), # -lt (未満)
, ‐le (以下)
while :
do
read -p "コンピュータは 1-100 の乱数を生成しました、あなたは推測しました: " cai
if [ $cai -eq $num ]
then
echo "おめでとうございます、ご推測ください"
exit
elif [ $cai -gt $num ]
then
echo "おっと、大きいと思います"
else
echo "おっと、小さいと思います"
(2) 本機に接続しているリモートIPの数を確認する
#!/bin/bash
#!/bin/bash
# このマシンに接続しているリモート IP の数を確認します (ssh、Web、または FTP 経由かどうか)
# netstat -atn を使用して、このマシン上のすべての接続のステータスを表示します。 - a すべて表示、
# -t TCP 接続情報のみを表示、 -n 数値形式で表示
# ローカル アドレス (4 列目はマシンの IP とポート情報)
# 外部アドレス (5 列目はマシンの IP とポート情報)リモートホスト)
# awk コマンドを使用して列 5 のデータのみを表示し、次に列 1 の IP アドレスの情報を表示します
# ソートは数値でソートでき、最後に uniq を使用して冗長な重複を削除し、数値をカウントします重複の数
netstat -atn | awk '{ print $5}' | awk '{print $1}' | sort -nr | uniq -c
(3)ハローワールド
#!/bin/bash
関数の例 { echo "Hello world!" 例_
(4) Tomcatのpidを出力する
#!/bin/sh`
v1="Hello"
v2="world"
v3=${v1}${v2}
echo $v3
pidlist=`ps -ef|grep apache-tomcat-7.0.75|grep -v " grep"|awk '{print $2}'`
echo $pidlist
echo "tomcat Id list :$pidlist" //显表示pid
(5) じゃんけんゲームのスクリプト作成
#!/bin/bash
game=(ジャンケン)
num=$[RANDOM%3]
Computer=${game[$sum]}
echo "次のヒントに従ってパンチのジェスチャーを選択してください"
echo "1. ロック"
echo " 2. ハサミ"
echo " 3. 布"
read -p "1-3 を選択してください:" person
case $person in
1)
if [ $num -eq 0 ]
then
echo "tie"
elif [ $num -eq 1 ]
then
echo "あなたの勝ち"
else
echo "コンピュータの勝ち"
fi;;
2)
if [ $num -eq 0 ]
then
echo "コンピュータの勝ち"
elif [ $num -eq 1 ]
then
echo "Tie"
else
echo "あなたの勝ちです」
fi;;
3)
if [ $num -eq 0 ]
then
echo "あなたの勝ち"
elif [ $num -eq 1 ]
then
echo "コンピュータの勝ち"
else
echo "同点"
fi;;
*)
echo "1 ~ 3 の数字を入力する必要があります"
イーサック
(6) 九十九九九
#!/bin/bash
for i in `seq 9`
do
for j in `seq $i`
do
echo -n "$j*$i=$[i*j] "
完了
echo
完了
(7) スクリプトはソース コードを使用して memcached サーバーをインストールします
#!/bin/bash
# memcached のワンクリック展開 (大学公式 Web サイト: www.aliangedu.cn)
# スクリプトはソース コードを使用して memcached サーバーをインストールします
# 注: ソフトウェアのダウンロード リンクの有効期限が切れている場合は、ダウンロード リンクを更新してくださいmemcached wget のリンク
http://www.memcached.org/files/memcached-1.5.1.tar.gz
yum -y install gcc
tar -xf memcached‐1.5.1.tar.gz
cd memcached‐1.5.1
./
メイク
メイクインストールを構成する
(8) 本機の現在のユーザーがスーパー管理者であるかどうかを検出する
#!/bin/bash
# このマシンの現在のユーザーがスーパー管理者であるかどうかを検出します。管理者の場合は、yum を使用して vsftpd をインストールします。そうでない場合は、 # はい、
非管理者になるように求めるプロンプトが表示されます (バージョンを比較する文字列)
if [ $ USER == "root" ]
then
yum -y install vsftpd
else
echo "あなたは管理者ではないため、ソフトウェアをインストールする権限がありません"
fi
(9) if演算式
#!/bin/bash -xv
if [ $1 -eq 2 ] ;then
echo "wo ai wenmin"
elif [ $1 -eq 3 ] ;then
echo "wo ai wenxing "
elif [ $1 -eq 4 ] ;then
echo "wo de xin "
elif [ $1 -eq 5 ] ;then
echo "wo de ai "
fi
(10) スクリプトは Tomcat プロセスを強制終了し、再起動します。
#!/bin/bash
#kill tomcat pid
pidlist=`ps -ef|grep apache-tomcat-7.0.75|grep -v "grep"|awk '{print $2}'` #tomcat echo の PID 番号を見つける "
tomcat Id list :$pidlist" //pid を表示
kill -9 $pidlist #改善されたプロセスを強制終了
echo "KILL $pidlist:" //プロセスを要求し強制終了
echo "service stop success"
echo "start tomcat"
cd /opt /apache-tomcat-7.0.75
pwd
rm -rf work/*
cd bin
./startup.sh #;tail -f ../logs/catalina.out
(11) チェス盤を印刷する
#!/bin/bash
# チェスボードを印刷します (大学公式 Web サイト: www.alianedu.cn)
# 2 つの変数 i と j を設定します。1 つは行を表し、1 つは列を表します、チェスは 8*8 チェスボードです
# i=1 を意味しますチェス盤の最初の行を印刷するには、チェス盤の最初の行にはグレーと青の間隔出力があり、合計 8 列
# i=1、j=1 は最初の行の最初の列を表し、i=2、j=3 は表します2 行目の 3 列目
# チェス盤のルールは i+j です。偶数の場合は青色のカラー ブロックを出力し、奇数の場合は灰色のカラー ブロックを出力します。# カラー ブロックを出力するには echo -ne を使用します
。改行を印刷した後にカラー ブロックは自動的に印刷されません。引き続き同じ行に他のカラー ブロックを出力します。
for i in {1..8}
do
for j in {1..8}
do
sum=$[i+j ]
if [ $[sum%2] -eq 0 ] ;then
echo -ne "\033[46m \033[0m" else
echo
-ne "\033[47m \033[0m" fi完了しました
echo完了し
ました
(12) 現在の Linux システムでコンピュータにログインできるアカウントの数を数える
#!/bin/bash
# 現在の Linux システムでコンピューターにログインできるアカウントの数をカウントします #
方法 1:
grep "bash$" /etc/passwd | wc -l #
方法 2:
awk -f : ' /bash$/ {x++}end{print x}' /etc/passwd
(13) MySQLテーブルデータのバックアップ
#!/bin/sh
source /etc/profile
dbName=mysql
tableName=db
echo [`date +'%Y-%m-%d %H:%M:%S'`]' データのロード開始...'
mysql -uroot -proot -P3306 ${dbName} -e "LOAD DATA LOCAL INFILE '# /home/wenmin/wenxing.txt' INTO TABLE ${tableName} FIELDS TERMINATED BY ';'" echo [
`date +'%Y -%m-%d %H:%M:%S'`]' データの読み込みを終了...' EOF
を終了します
(14) 無限ループを使用して、eth0 ネットワーク カードから送信されたパケット トラフィックをリアルタイムで表示します。
#!/bin/bash
# 無限ループを使用して、eth0 ネットワーク カードによって送信されたデータ パケット トラフィックをリアルタイムで表示します
。
do
echo 'ローカル ネットワーク カード ens33 のトラフィック情報は次のとおりです:'
ifconfig ens33 | grep " RX パック" | awk '{print $5}'
ifconfig ens33 | grep "TX パック" | awk '{print $5}'
スリープ 1
完了
(15) 192.168.4.0/24 のネットワーク セグメント全体でどのホストの電源がオンになっており、どのホストの電源がオフになっているかをテストするスクリプトを作成します。
#!/bin/bash
# 192.168.4.0/24 のネットワーク セグメント全体でどのホストがオンでどのホストがオフであるかをテストするスクリプトを作成します # {1..254} の i の
ステータス (バージョン)は #すべて 0.3 秒 Ping 1 回、Ping 計 2 回、ping のタイムアウト時間を 1 ミリ秒単位で設定 ping -c 2 -i 0.3 -W 1 192.168.1.$i &>/dev/null if [ $? - eq 0 ];then echo "192.168.1.$i is up" else echo "192.168.1.$i is down " 終了
(16) スクリプトの作成: ユーザーにユーザー名とパスワードの入力を求めると、スクリプトによって対応するアカウントが自動的に作成され、パスワードが設定されます。ユーザーの場合
#!/bin/bash
# スクリプトを作成します。ユーザーにユーザー名とパスワードの入力を求めると、スクリプトによって対応するアカウントが自動的に作成され、パスワードが設定されます。ユーザーがアカウント名を入力しない場合は、アカウント名を入力してスクリプトを終了する必要があることを示すプロンプトが表示されます。ユーザーがパスワードを入力しない場合は、デフォルトの# デフォルト 123456がデフォルトのパスワードとして
一律に使用されます。read -p "ユーザー名を入力してください:" user # -z を使用して変数が空かどうかを判断し、空の場合はユーザーにアカウント名の入力を求め、スクリプトを終了します。終了コードは 2 #Noスクリプト終了後に入力したユーザー名、 $? を使用して戻りコードが 2 であることを確認するif [ -z $user ]; then echo "アカウント名を入力する必要はありません" exit 2 fi #stty -echo を使用してスクリプトを閉じますシェルのエコー関数#stty echo を使用してシェルのエコーを開く 表示関数stty -echo read -p "パスワードを入力してください:" pass stty echo pass=${pass:-123456} useradd "$user" echo " $pass" | passwd --stdin "$user"
(17) スクリプトを使用して 3 つの入力整数をソートします
#!/bin/bash
# 3 つの整数を順番に入力するようにユーザーにプロンプトを表示すると、スクリプトは数値のサイズに応じて 3 つの数値を並べ替えて出力します
read -p " 整数を入力してください: " num1
read -p " を入力してください整数: " num2
read -p " 整数を入力してください: " num3
# 誰が大きいか小さいかに関係なく、最後に出力されます echo "$num1,$num2,$num3" # 最小値が
常に保存されますnum1 には常に中央の値が num2 に格納され、最大値は常に num3 に格納されます
# 入力がこの順序ではない場合は、数値の格納順序を変更します。たとえば、次のような値を入れ替えることができます。 num1 と num2
tmp=0
# num1 が num2 より大きい場合、num1 と num2 の値を交換して、num1 変数が最小値であることを確認します
if [ $num1 -gt $num2 ]; then
tmp=$num1
num1=$num2
num2=tmp
fi
# num1 が num3 より大きい場合、num1 と num3 を入れ替えて、最小値が num1 変数に確実に格納されるようにします
if [ $num1 -gt $num3 ];then
tmp=$num1
num1=$ num3
num3=$tmp
fi
# num2 が num3 より大きい場合、num2 と num3 を交換して、最小値が num2 変数に格納されるようにします
if [ $num2 -gt $num3 ];then
tmp=$num2
num2=$num3
num3=$tmp
fi
echo "並べ替えられたデータ (小さいものから大きいものへ) は次のとおりです: $num1,$num2,$num3"
(18) コンピュータの現在時刻に応じて挨拶が返され、起動時にスクリプトが開始されるように設定できます。
#!/bin/bash
# コンピュータの現在時刻に応じて挨拶が返され、ブート時にスクリプトが開始されるように設定できます
(大学の公式 Web サイト: www.alianedu.cn) # 00-12 o'時計は午前、12時〜18時は午後、18時〜24時は夕方
# dateコマンドで時刻を取得後、ifで時間間隔を判断して挨拶の内容を決定
tm=$ (日付 +%H)
if [ $tm -le 12 ];then
msg="おはよう $USER"
elif [ $tm -gt 12 -a $tm -le 18 ];then
msg="おはよう $USER"
else
msg="おやすみ $USER"
fi
echo "現在時刻: $(date +"%Y‐% m-%d %H:%M:%S")"
echo -e "\033[34m$msg \033[0分]
(19) I lov clsをtxtファイルに書き込む
#!/bin/bash
cd /home/wenmin/
touch wenxing.txt
echo "CLS が大好きです" >>wenxing.txt
(20) ループ判定のスクリプト作成
#!/bin/bash
s=0;
for((i=1;i<100;i++))
do
s=$[$s+$i]
完了
echo $s
r=0;
a=0;
b=0;
for((x=1;x<9;x++))
do
a=$[$a+$x]
echo $x
完了
for((y=1;y<9;y++))
do
b=$[$b+$ y]
echo $y
完了
echo $r=$[$a+$b]
(21) ループ判定のスクリプト作成
#!/bin/bash
for i in "$*"
do
echo "wenmin xihuan $i"
完了
for j in "$@"
do
echo "wenmin xihuan $j"
完了
(22) スクリプトは tar コマンドを使用して、/var/log にあるすべてのログ ファイルを 5 週間ごとにバックアップします。
#!/bin/bash
# tar コマンドを使用して、/var/log にあるすべてのログ ファイルを 5 日ごとにバックアップします。
# vim /root/logbak.sh
# バックアップ スクリプトを作成します。バックアップ後のファイル名には日付ラベルが含まれます。以降のバックアップは以前のバックアップ データに上書きされます。
# date コマンドはバッククォートで囲む必要があり、バッククォートはキーボードの <tab> キー
tar -czf log-`date +%Y%m%d` 上にあることに注意してください。 tar.gz /var/log
# crontab -e #スケジュールされたタスクを書き込み、バックアップ スクリプトを実行
00 03 * * 5 /home/wenmin/datas/logbak.sh
(23) スクリプト集計関数演算関数 xx()
#!/bin/bash
関数 sum()
{ s=0; s=$[$1+$2] echo $s } read -p "パラメータを入力 " p1 read -p "パラメータを入力 " p2 sum $p1 $p2 function multi() { r=0; r=$[$1/$2] echo $r } read -p "パラメータを入力 " x1 read -p "パラメータを入力 " x2 multi $x1 $x2 v1=1 v2=2 let v3=$v1+$v2 echo $ v3
(24) スクリプトの場合 — esac 分岐構造式
#!/bin/bash
case $1 in
1)
echo "wenmin "
;;
2)
エコー「ウェンシン」
;;
3)
「wemchang」をエコーする
;;
4)
「yijun」をエコーします
;;
5)
「シナアン」をエコーします
;;
6)
「シケン」をエコーする
;;
7)
「ヤンナ」をエコーします
;;
*)
「ダンリアン」をエコーします
;;
イーサック
(25) 監視するページのアドレスを定義し、Tomcat の状態を再起動または維持します。
#!/bin/sh
# 関数: Tomcat プロセスを自動的に監視し、ハングアップした場合は再起動します。 #
author:huanghong
# DEFINE
# Tomcat PPID を取得
TomcatID=$(ps -ef |grep tomcat |grep -w 'apache-tomcat -7.0 .75'|grep -v 'grep'|awk '{print $2}')
# tomcat_startup
StartTomcat=/opt/apache-tomcat-7.0.75/bin/startup.sh
#TomcatCache=/usr/apache-tomcat -5.5 .23/work
# 監視するページアドレスを定義
WebUrl=http://192.168.254.118:8080/
# ログ出力
GetPageInfo=/dev/null
TomcatMonitorLog=/tmp/TomcatMonitor.log
Monitor()
{
echo "[ info] start Monitor tomcat...[$(date +'%F %H:%M:%S')]"
if [ $TomcatID ]
then
echo "[info]Tomcat プロセス ID は $TomcatID です。 」
# 戻りステータス コードを取得
TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
if [ $TomcatServiceCode -eq 200 ];then
echo "[info] returns コードは $TomcatServiceCode、tomcat は正常に起動、ページは正常です。"
else
echo "[error] アクセスエラーが発生、ステータスコードは $TomcatServiceCode、$GetPageInfo にエラーログが出力されました"
echo " [エラー] Tomcat を再起動します"
kill -9 $TomcatID # 元の Tomcat プロセスを強制終了します
sleep 3
#rm -rf $TomcatCache # Tomcat キャッシュをクリーンアップします
$StartTomcat
fi
else
echo "[エラー] プロセスが存在しません! Tomcat は自動的に再起動します... "
echo "[情報]$StartTomcat、お待ちください。 …"
#rm -rf $TomcatCache
$StartTomcat
fi
echo "----------------------------"
}
Monitor>>$TomcatMonitorLog
(26) ロケーション変数を使用して Linux システム アカウントとパスワードを作成する
#!/bin/bash
# ロケーション変数を使用して Linux システム アカウントとパスワードを作成します
# $1 はスクリプトを実行する最初のパラメータ、$2 はスクリプトを実行する 2 番目のパラメータ
useradd "$1"
echo "$2" | passwd --stdin " 1ドル」
(27) 変数の数を渡して取得し、出力します
#!/bin/bash
echo "$0 $1 $2 $3" // 3 つのパラメータを渡します
echo $# // 受信パラメータの数を取得します
echo $@ // 受信パラメータを印刷して取得します echo $* // 受信パラメータを
印刷して取得します受信パラメータパラメータ
(28) ローカルメモリとハードディスクの残量をリアルタイム監視 メモリ残量が500M未満、ルートパーティションの残量が1000M未満になると、ルートにアラームメールが送信されます。管理者
#!/bin/bash
# ローカルメモリとハードディスクの残量をリアルタイムに監視し、メモリ残量が500M未満、ルートパーティションの残量が1000M未満になるとアラームメールが送信されます。ルート管理者に送信 # ルート パーティションの残りのスペースを抽出します。
disk_size
=$(df / | awk '/\//{print $4}')
# メモリの残りの空きスペースを抽出します。
mem_size=$(free | awk ' /Mem/{print $4}')
while :
do
# メモリとディスク抽出スペースのサイズは Kb の単位に基づいていることに注意してください
if [ $disk_size -le 512000 -a $mem_size -le 1024000 ]
then
mail ‐s 「警告」ルート <<EOF
リソースが不足しています、リソースが不足しています
EOF
完了
しました
(29) 指定したディレクトリに該当ファイルが存在するか確認
#!/bin/bash
if [ -f /home/wenmin/datas ]
then
echo "ファイルが存在します"
fi
(30) スクリプト定義 whileループ文
#!/bin/bash
if [ -f /home/wenmin/datas ]
then
echo "ファイルが存在します"
fi
[root@rich datas]# cat while.sh
#!/bin/bash
s=0
i=1
while [ $ i -le 100 ]
do
s=$[$s + $i]
i=$[$i + 1]
完了
echo $s
echo $i
(31) LNMP のワンクリック導入(RPM パッケージ版)
#!/bin/bash
# LNMP のワンクリック展開 (RPM パッケージ バージョン)
# LNMP のインストールと展開には yum を使用します。事前に yum ソースを設定する必要があります。そうしないとスクリプトが失敗します。
# このスクリプトは centos7 で使用されます。 2 または RHEL7.2
yum -y install httpd
yum -y install mariadb mariadb-devel mariadb-server
yum -y install php php-mysql
systemctl start httpd mariadb
systemctl Enable httpd mariadb
(32) コンソールの受信パラメータを読み取ります。
#!/bin/bash
read -t 7 -p "名前を入力" NAME
echo $NAME
read -t 11 -p "年齢を入力" AGE
echo $AGE
read -t 15 -p "友達を入力" FRIEND
echo $ FRIEND
read -t 16 -p "input your love " LOVE
echo $LOVE
(33) コピーを実現するスクリプト
#!/bin/bash
cp $1 $2
(34) ファイルの有無の判定をスクリプトで実現
#!/bin/bash
if [ -f file.txt ];then
echo "ファイルが存在します"
else
echo "ファイルが存在しません"
fi