ホームページ > 運用・保守 > Linuxの運用と保守 > 基本的なシェル構文の紹介と使用

基本的なシェル構文の紹介と使用

PHP中文网
リリース: 2017-06-20 11:24:48
オリジナル
1970 人が閲覧しました

1. 変数

1. 変数の命名規則: 文字またはアンダースコアで始まり、その後に数字、文字、またはアンダースコアが続きます。ただし、変数名を見たときにその意味が推測できるようにすることをお勧めします。

2. 変数の割り当て echo ${egon_salary}yuan

20000yuan

4. bash でデータ型を宣言する必要はありません。デフォルトは文字型

2 です。算術演算子: + - * / %

[root@bogon ~]# echo $[5%2]

1

2. 代入演算子: =、+=、-=、*=、/=、%=

[root@bogon ~] # x=10

[root@bogon ~]# ((x+=1))

[root@bogon ~]# echo $x

11

3. 関係演算子: <,>,!=,== ,>=,<= ,||,&&


関係演算子は、(( ))、[] とともによく使用されますが、同じ結果を得ることができますが、(( )) はファイルのタイプを決定できません。 []、[] を使用してファイルの種類を決定します。結果は、$? を使用してコマンドの実行結果を確認します。0 以外の場合は false を意味します。

[root@bogon ~]# x=10

[root@bogon ~]# ((x> =8))

[root@bogon ~]# echo $?
0

4. シェル内の計算機

$[] を使用して簡単な操作を実行できると前に言いましたが、10 進数の操作が含まれる場合は、シェルで電卓を使用する必要があります

まず、ソフトウェアをインストールする必要があります。yum install -y bc

[ root@bogon ~]# res=$(echo 'scale=2;1/3' |bc -l |cut -d'.' -f2)

[root@bogon ~]# echo ${res}%

33 %

5.test コマンド test

test

-n str 文字列の長さはゼロではありません

- z str 文字列の長さはゼロです

-b ファイルが存在し、ブロック ファイルです


-d ファイルが存在し、ディレクトリファイル

-e ファイルが存在し、通常のファイルです

-f ファイルが存在し、通常のファイルです

リンクファイルの場合(-L と同じ)

-s ファイルが存在し、0 バイトより大きいです

比較ファイル間

file1 -nt file2 file1の作成時刻はfile2より遅い

file1 -ot file2 file1の作成時刻はfile2より遅い

整数の比較

int1 -ne int2 int1とint2は等しくない

int1 -eq int2 int1とint2は等しい

int1 -lt int2 int1はint2より小さい

int1 -le int2 int1はint2以下

int1 -gt int2 int1はint2より大きい

int1 -ge int2 int1はint2以上

文字列の比較

str1 = str2 str1とstr2は等しい

str1! =str2 str1 と str2 は等しくありません

式間の比較

式1 -a 式2 式1と式2は両方とも真です

式1 -o 式2 式1または式2は真です

テスト例

6. test:

[root@bogon ~]# [[ 2 > 1 ]][root@bogon ~]# echo $?0
[root@bogon ~]# ((20>10))[root@bogon ~]# echo $?0
[root@bogon ~]# ((20<10))[root@bogon ~]# echo $?1
ログイン後にコピー

文字列テスト

[root@bogon ~]# [ "abc" = "abc" ][root@bogon ~]# echo $?0
[root@bogon ~]# [[ "abc" = "abc" ]][root@bogon ~]# echo $?0
[root@bogon ~]# (("abc" = "abc"))[root@bogon ~]# echo $?1
ログイン後にコピー

[root@bogon ~]# [[ a = a && 1 < 2 ]][root@bogon ~]# echo $?0
[root@bogon ~]# [[ a = a && 1 < 2 ]][root@bogon ~]# echo $?0
ログイン後にコピー

[root@bogon ~]# (( a = a || 1 > 2 ))[root@bogon ~]# echo $?1[root@bogon ~]# [[ a = a || 1 > 2 ]][root@bogon ~]# echo $?0
ログイン後にコピー

単純に数値を比較するには、(( ))を使用します

純粋な数値以外の比較には、[[ ] ]

3を使用します。プロセス制御

1.if ブランチ

1) ユーザーアカウントパスワードの確認:

input your name : zhangcan
input password : 123login successful
[root@bogon ~]# ./usertest.sh input your name : hha
input password : hag
user or password error
ログイン後にコピー

#! /bin/bashuser='zhangcan'password='123'read -p 'input your name : ' name
read -p 'input password : ' codeif [ $name = $user -a $code = $password ];then
        echo 'login successful'elseecho 'user or password error'fi~
ログイン後にコピー

2) 学年の決定

#!/bin/bash #根据用户输入的成绩,判断所属档次,并输出给用户read -p 'input your score : ' scoreif  [ $score -ge 90 ];then
    echo '优秀'elif [ $score -ge 70 -a $score -lt 90 ];then
    echo '良好'elif [ $score -ge 60 -a $score -lt 70 ];then
    echo '及格'elif [ $score -lt 60 ];then
    echo '较差'fi
ログイン後にコピー

2.whileその間(条件)

do

Command
done
例: ユーザーが入力するファイルの種類を決定します

#!/bin/bashwhile :
do
    read -p 'input your file : ' fileif [ -z $file ];thencontinueelsebreakfi
doneif [ -f $file ];then
    echo "$file is regular file"elif [ -b $file ];then
    echo "$file is block file"elif [ -d $file ];then
    echo "$file is directory file"elseecho "$file type unkonw"fi
ログイン後にコピー
3. for ループ

for i in {1..10} # in は必ずしもそうである必要はありません結果を返すコマンドである限り、数値

do

echo $i

done

例 1: サブネットで使用できる IP をテストするスクリプトを作成します

#!/bin/bashfor i in {1..50}
do
    ping -c1 192.168.16.$i &> /dev/null  # -c1表示ping一次if [ $? -ne 0 ];then
        echo "192.168.16.$i successful"echo "192.168.16.$i" >> ~/ipavailable.txt
    fi
done~
ログイン後にコピー
例2: /dev

#!/bin/bashdir='/dev'for i in $(ls $dir)
doif [ -h $dir/$i ];then
        ((link+=1))elif [ -f $dir/$i ];then
        (( rfile+=1))elif [ -d $dir/$i ];then
        ((directory+=1))elif [ -b $dir/$i ];then
        (( block+=1 ))else(( typeunknow+=1))
    fi
done
echo 'block' $block
echo 'regular file' $rfile
echo 'directory' $directory
echo 'link' $link
echo 'unknow' $typeunknow
ログイン後にコピー

下の各ファイルタイプの数を数えます

ネストされたループ

例1: 9-9の乗算表を出力します

#!/bin/bashfor ((i=1;i<=9;i++))
dofor ((j=1;j<=i;j++))
    do
        echo -n "$i*$j=$[$i*$j]"done
    echo
done
ログイン後にコピー

例2: ログインに成功した後、ユーザーのログインアカウントのパスワードを確認しますquit
#!/bin/bashuser=&#39;zhangcan&#39;password=&#39;123&#39;tag=truewhile $tag
do
    read -p &#39;input your name : &#39; name
    read -p &#39;input your password : &#39; codeif [[ $name = $user ]] && [[ $code = $password ]];then
        echo &#39;login successful&#39;while $tag
        do
            read -p &#39;>>: ' cmdif [[ $cmd = 'quit' ]];then
                tag=falseelse$cmd
            fi
        done
    fi
done
ログイン後にコピー

と入力するとコマンドを実行して終了できます。

以上が基本的なシェル構文の紹介と使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート