大數據系列博客之 --- 深入簡出 Shell 腳本語言(提升篇)

来源:https://www.cnblogs.com/lsy131479/archive/2018/11/06/9914897.html
-Advertisement-
Play Games

首先聲明,此系列shell系列博客分為四篇發佈,分別是: 基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html 高級篇:https://www ...


 

首先聲明,此系列shell系列博客分為四篇發佈,分別是:

  基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html

  提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html

  高級篇:https://www.cnblogs.com/lsy131479/p/9914962.html

  面試篇:

 

6. 條件判斷

1基本語法

[ condition ]註意condition前後要有空格

註意:條件非空即為true[ fsdm ]返回true[] 返回false

2. 常用判斷條件

1兩個整數之間比較

= 字元串比較

-lt 小於less than -le 小於等於less equal

-eq 等於equal -gt 大於greater than

-ge 大於等於greater equal -ne 不等於Not equal

2按照文件許可權進行判斷

-r 有讀的許可權read -w 有寫的許可權write

-x 有執行的許可權execute

3按照文件類型進行判斷

-f 文件存在並且是一個常規的文件file

-e 文件存在existence -d 文件存在並是一個目錄directory

3案例實操

123是否大於等於22

 

[fsdm@hadoop101 datas]$ [ 23 -ge 22 ]
[fsdm@hadoop101 datas]$ echo $?
0  (true)

 

2helloworld.sh是否具有寫許可權

 

[fsdm@hadoop101 datas]$ [ -w helloworld.sh ]
[fsdm@hadoop101 datas]$ echo $?
0  (true)

 

3/home/fsdm/cls.txt目錄中的文件是否存在

 

[fsdm@hadoop101 datas]$ [ -e /home/fsdm/cls.txt ]
[fsdm@hadoop101 datas]$ echo $?
1   (false)

 

4)多條件判斷&& 表示前一條命令執行成功時,才執行後一條命令,|| 表示上一條命令執行失敗後,才執行下一條命令

 

[fsdm@hadoop101 ~]$ [ condition ] && echo OK || echo notok
OK
[fsdm@hadoop101 datas]$ [ condition ] && [ ] || echo notok
notok

 

7. 流程式控制制(重點)

7.1 if 判斷

1基本語法

if [ 條件判斷式 ];then 
  程式
fi
或者
if [ 條件判斷式 ] 
  then
    程式
fi

 

註意事項:

1[ 條件判斷式 ],中括弧和條件判斷式之間必須有空格

2if後要有空格

2案例實操

1)輸入一個數字如果1則輸出fsdm zhen shuai如果是2,則輸出heihei zhen mei如果是其它,什麼也不輸出。

 

[fsdm@hadoop101 datas]$ touch if.sh
[fsdm@hadoop101 datas]$ vim if.sh

#!/bin/bash

if [ $1 -eq "1" ]
then
        echo "fsdm zhen shuai"
elif [ $1 -eq "2" ]
then
        echo "heihei zhen mei"
fi

[fsdm@hadoop101 datas]$ chmod 777 if.sh 
[fsdm@hadoop101 datas]$ ./if.sh 1
fsdm zhen shuai

 

7.2 case 語句

1基本語法

case $變數名 in 
  "值1") 
    如果變數的值等於值1,則執行程式1 
    ;;
  "值2") 
    如果變數的值等於值2,則執行程式2 
    ;;
  …省略其他分支… 
  *) 
    如果變數的值都不是以上的值,則執行此程式
    ;;
esac

 

註意事項:

1) case行尾必須為單詞“in”,每一個模式匹配必須以右括弧“)”結束。

2) 雙分號;;”表示命令序列結束,相當於java中的break

3) 最後的*)”表示預設模式,相當於java中的default

2案例實操

1)輸入一個數字如果1則輸出fsdm如果是2,則輸出heihei如果是其它輸出renyao

 

[fsdm@hadoop101 datas]$ touch case.sh
[fsdm@hadoop101 datas]$ vim case.sh

!/bin/bash

case $1 in
"1")
        echo "fsdm"
;;

"2")
        echo "heihei"
;;
*)
        echo "renyao"
;;
esac

[fsdm@hadoop101 datas]$ chmod 777 case.sh
[fsdm@hadoop101 datas]$ ./case.sh 1
fsdm

 

7.3 for 迴圈

1基本語法1

for (( 初始值;迴圈控制條件;變數變化 )) 
  do
    程式
  done

 

2案例實操

1)從1加到100

 

[fsdm@hadoop101 datas]$ touch for1.sh
[fsdm@hadoop101 datas]$ vim for1.sh

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
        s=$[$s+$i]
done
echo $s

[fsdm@hadoop101 datas]$ chmod 777 for1.sh 
[fsdm@hadoop101 datas]$ ./for1.sh5050

 

3基本語法2

for 變數 in 值1 值2 值3… 
  do 
    程式 
  done

4案例實操

1)列印所有輸入參數

 

[fsdm@hadoop101 datas]$ touch for2.sh
[fsdm@hadoop101 datas]$ vim for2.sh

#!/bin/bash
#列印數字

for i in $*
    do
      echo "fsdm love $i "
    done

[fsdm@hadoop101 datas]$ chmod 777 for2.sh 
[fsdm@hadoop101 datas]$ bash for2.sh heihei haha hehe
ban xx love heihei
ban xx love haha
ban xx love hehe

 

2比較$*$@區別

a$*$@都表示傳遞給函數或腳本的所有參數,不被雙引號“”包含時,都以$1 $2 …$n的形式輸出所有參數

 

[fsdm@hadoop101 datas]$ touch for.sh
[fsdm@hadoop101 datas]$ vim for.sh

#!/bin/bash 

for i in $*
do
      echo "fsdm love $i "
done

for j in $@
do      
        echo "fsdm love $j"
done

[fsdm@hadoop101 datas]$ bash for.sh heihei haha hehe
fsdm love heihei 
fsdm love haha 
fsdm love hehe 
fsdm love heihei
fsdm love haha
fsdm love hehe

 

b當它們被雙引號“”包含時,“$*”會將所有的參數作為一個整體,以“$1 $2 …$n”的形式輸出所有參數;“$@”會將各個參數分開,以“$1” “$2”…”$n”的形式輸出所有參數

 

[fsdm@hadoop101 datas]$ vim for.sh

#!/bin/bash 

for i in "$*" 
#$*中的所有參數看成是一個整體,所以這個for迴圈只會迴圈一次 
        do 
                echo "fsdm love $i"
        done 

for j in "$@" 
#$@中的每個參數都看成是獨立的,所以“$@”中有幾個參數,就會迴圈幾次 
        do 
                echo "fsdm love $j" 
done

[fsdm@hadoop101 datas]$ chmod 777 for.sh
[fsdm@hadoop101 datas]$ bash for.sh heihei haha hehe
fsdm love heihei haha hehe
fsdm love heihei
fsdm love haha
fsdm love hehe

 

7.4 while 迴圈

1基本語法

while [ 條件判斷式 ] 
  do
    程式
  done

 

2案例實操

1)從1加到100

 

 

 

 

[fsdm@hadoop101 datas]$ touch while.sh
[fsdm@hadoop101 datas]$ vim while.sh

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

[fsdm@hadoop101 datas]$ chmod 777 while.sh 
[fsdm@hadoop101 datas]$ ./while.sh 
5050

 

8. read讀取控制台輸入

1基本語法

read(選項)(參數)

選項:

-p:指定讀取值時的提示符;

-t:指定讀取值時等待的時間(秒)。

參數

變數:指定讀取值的變數名

2案例實操

1)提示7內,讀取控制台輸入的名稱

 

[fsdm@hadoop101 datas]$ touch read.sh
[fsdm@hadoop101 datas]$ vim read.sh

#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

[fsdm@hadoop101 datas]$ ./read.sh 
Enter your name in 7 seconds fsdm
fsdm

 

9. 函數

9.1 系統函數

1basename基本語法

basename [string / pathname] [suffix]   (功能描述:basename命令會刪掉所有的首碼包括最後一個(‘/’)字元,然後將字元串顯示出來。

選項:

suffix為尾碼,如果suffix被指定了,basename會將pathnamestring中的suffix去掉。

2案例實操

1)截取該/home/fsdm/fsdm.txt路徑的文件名稱

 

[fsdm@hadoop101 datas]$ basename /home/fsdm/fsdm.txt 
fsdm.txt
[fsdm@hadoop101 datas]$ basename /home/fsdm/fsdm.txt .txt
fsdm

 

3. dirname基本語法

dirname 文件絕對路徑 (功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),然後返回剩下的路徑(目錄的部分))

4案例實操

1)獲取fsdm.txt文件的路徑

 

[fsdm@hadoop101 ~]$ dirname /home/fsdm/fsdm.txt 
/home/fsdm

 

9.2 自定義函數

1基本語法

[ function ] funname[()]
{
Action;
[return int;]
}
funname

 

2經驗技巧

1)必須在調用函數地方之前,先聲明函數,shell腳本是逐行運行。不會像其它語言一樣先編譯。

2)函數返回值,只能通過$?系統變數獲得,可以顯示加:return返回,如果不加,將以最後一條命令運行結果,作為返回值。return後跟數值n(0-255)

3案例實操

1)計算兩個輸入參數的和

 

[fsdm@hadoop101 datas]$ touch fun.sh
[fsdm@hadoop101 datas]$ vim fun.sh

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

[fsdm@hadoop101 datas]$ chmod 777 fun.sh
[fsdm@hadoop101 datas]$ ./fun.sh 
Please input the number1: 2
Please input the number2: 5
7

 

 

基礎篇結束,如需深入請閱讀後續篇章,如有疑問私信或評論指出

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 格式:tar zcvf 壓縮後的路徑及包名 你要壓縮的文件 z:gzip壓縮 c:創建壓縮包 v:顯示打包壓縮解壓過程 f:接著壓縮 t:查看壓縮包內容 x:解壓 X:指定文件列表形式排除不需要打包壓縮的文件或目錄 -exclude:指定排除文件或目錄不需要打包壓縮的文件或目錄(也可以用正則匹配/通 ...
  • 1、前言 新購置一臺便宜伺服器做資料庫伺服器,減輕Web伺服器的壓力。 為了安全性,root密碼設置的非常複雜(隨機生成),厭倦了拷貝密碼登陸的歷史。 Putty基本用法都不會的請先花10分鐘自行學習。 2、開始 1、用PuTTY SSH 密鑰生成工具puttygen.exe生成密鑰 生成的密鑰類型 ...
  • 1、對虛擬機進行設置,點擊該虛擬機的設置在網路適配器下將網路連接設置為NAT模式。 2、對虛擬機進行設置,點擊虛擬機左上方的編輯-->虛擬網路編輯器,將WMnet信息設置為NAT模式,其它的無需改動,預設即可。 3、在虛擬機中vi /etc/sysconfig/network-scripts/ifc ...
  • Linux記憶體文件系統:可滿足高IO的要求 ramdisk: 基於虛擬在記憶體中的其他文件系統(ex2fs)。 掛載方式:mount /dev/ram /mnt/ramdisk ramfs: 物理記憶體文件系統,只存在於物理記憶體中。其大小也不是固定的,而是隨著所需要的空間動態得增減。 掛載方式:moun ...
  • 指令 cal 查看日曆date 查看日期bc 計算器ls 查看文件ls -l 查看具體信息(許可權,時間等)ls -a 查看所有的文件包括隱藏文件ll 作用同上d* 開頭的都是文件夾,- 開頭的都是文件who am i 用戶信息cat "文件名" 在控制台直接顯示文件內容vi/vim "文件名" 創建 ...
  • 一、命令介紹 top 命令用於動態的監控進程活動與系統負載信息。 格式為 top [參數] 二、實例 直接運行top命令 top命令執行結果的前五行為系統整體的統計信息,代表含義如下: 第1行:系統時間、運行時間、登陸終端數、系統負載(分別為1分鐘、5分鐘、15分鐘內的平均值) 第2行:進程總數、運 ...
  • 該問題,有很多種方法,但是很多方法要麼這個有問題,要麼那個有問題,最後終於找到一種沒問題的方法。記錄一下: 參考地址:https://www.jianshu.com/p/d18ff36a78d6?from=singlemessage Login.py(登錄視窗)文件 Main.py(主視窗)文件 ...
  • 首先聲明,此系列shell系列博客分為四篇發佈,分別是: 基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html 高級篇:https://www ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...