日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell脚本语言常用命令总结~

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell脚本语言常用命令总结~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫目錄

  • 一、Shell概述
  • 二、Shell腳本
  • 三、Shell中的變量
    • 3.1 系統變量
    • 3.2 自定義變量
    • 3.3 特殊變量:$n
    • 3.4 特殊變量:$#
    • 3.5 特殊變量:$* 、 $@
    • 3.6 特殊變量:$?
  • 四、運算法
  • 五、條件判斷
  • 六、流程控制
    • 6.1 if判斷
    • 6.2 case 語句
    • 6.3 for 循環
    • 6.4 while 循環
  • 七、read讀取控制臺輸入 ??
  • 八、函數
    • 8.1 系統函數
    • 8.2 自定義函數
  • 九、Shell工具 ??
    • 9.1 cut
    • 9.2 sed
    • 9.3 awk
    • 9.4 sort ??
  • 十、真題

一、Shell概述

Shell是一個命令行解釋器,它接收應用程序/用戶命令,然后調用操作系統內核。

優點:Shell還是一個功能相當強大的編程語言,易編寫、易調試、靈活性強。

二、Shell腳本

  • 腳本格式
  • 腳本以 #!/bin/bash 開頭(指定解析器)

  • 第一個Shell腳本:HelloWorld
  • 需求:創建一個Shell腳本,輸出helloworld

    1). 使用以下命令創建一個datas文件夾,存放腳本:

    [xiaobai@hadoop100 ~]$ mkdir datas

    2). 使用以下命令創建helloworld.sh腳本

    [xiaobai@hadoop100 datas]$ touch helloworld.sh

    3). 使用以下命令編輯helloworld.sh腳本:

    [xiaobai@hadoop100 datas]$ vim helloworld.sh

    4). 輸入以下內容:

    #!/bin/bashecho "hello world"

    5). 腳本執行方式:

    方式1??. 采用bash或sh+腳本的相對路徑/絕對路徑(不用賦予腳本+x權限)

    sh+腳本的相對路徑:

    [xiaobai@hadoop100 datas]$ sh helloworld.sh hello world

    sh+腳本的絕對路徑:

    [xiaobai@hadoop100 datas]$ sh /home/xiaobai/datas/helloworld.sh hello world

    bash+腳本的相對路徑:

    [xiaobai@hadoop100 datas]$ bash helloworld.sh hello world

    bash+腳本的絕對路徑:

    [xiaobai@hadoop100 datas]$ bash /home/xiaobai/datas/helloworld.sh hello world

    方式2??. 采用輸入腳本的絕對路徑/相對路徑執行腳本(必須具有可執行權限+x)

    a. 首先賦予helloworld.sh 腳本的+x權限:

    [xiaobai@hadoop100 datas]$ chmod 777 helloworld.sh

    b. 執行腳本:

    相對路徑執行腳本:

    [xiaobai@hadoop100 datas]$ ./helloworld.sh hello world

    絕對路徑執行腳本:

    [xiaobai@hadoop100 datas]$ /home/xiaobai/datas/helloworld.sh hello world

    tips:
    方式1?? ,本質是解析器幫助執行腳本,所以腳本本身不需喲啊執行權限;方式2?? ,本質是腳本需要自己執行,所以需要?x權限。

  • 第二個shell腳本:多命令處理
  • 需求:
    在/home/xiaobai/目錄下創建一個welcome.txt, 新增內容“Welcome to China!”

    1). 使用以下命令創建一個batch.sh腳本:

    [xiaobai@hadoop100 datas]$ touch batch.sh [xiaobai@hadoop100 datas]$ vi batch.sh

    2). 如圖,在batch.sh腳本添加以下內容:

    #!/bin/bashcd /home/xiaobai/ touch welcome.txt echo "Welcome to China" >> welcome.txt

    3). 運行batch.sh腳本:

    [xiaobai@hadoop100 datas]$ bash batch.sh

    4). 查看腳本運行結果:

    三、Shell中的變量

    3.1 系統變量

  • 常用系統變量
  • $HOME、$PWD、$SHELL、$USER等;
  • 案例
  • 查看系統變量的值:

    [xiaobai@hadoop100 ~]$ echo $HOME /home/xiaobai [xiaobai@hadoop100 ~]$ [xiaobai@hadoop100 ~]$ echo $PWD /home/xiaobai [xiaobai@hadoop100 ~]$ echo $SHELL /bin/bash [xiaobai@hadoop100 ~]$ echo $USER xiaobai

    3.2 自定義變量

  • 基本語法
  • 1). 定義變量:變量=值

    [xiaobai@hadoop100 ~]$ a=1 [xiaobai@hadoop100 ~]$ echo $a 1

    2). 撤銷變量:unset 變量

    [xiaobai@hadoop100 ~]$ unset a [xiaobai@hadoop100 ~]$ echo $a[xiaobai@hadoop100 ~]$

    3). 聲明靜態變量:readonly 變量,
    tips:只讀 不可以使用unset

    [xiaobai@hadoop100 ~]$ readonly b=2 [xiaobai@hadoop100 ~]$ echo $b 2 [xiaobai@hadoop100 ~]$ unset b -bash: unset: b: cannot unset: readonly variable
  • 變量定義規則
  • 1). 變量名稱可以由字母、數字和下劃線組成,但是不能以數字開頭,環境變量名最好大寫!

    2). 等號兩側?有空格;

    3). 在bash中,變量默認類型都是字符串類型,無法直接進行數值運算;

    [xiaobai@hadoop100 ~]$ c=1+2 [xiaobai@hadoop100 ~]$ echo $c 1+2

    4). 變量的值如果有空格,需要使用雙引號 " " / ’ ’ 括起來。

    [xiaobai@hadoop100 ~]$ d="i love China" [xiaobai@hadoop100 ~]$ echo $d i love China

    tips:
    使用“ export 變量名 ” 可以將變量提升為全局環境變量,供其他Shell程序使用。

    eg:
    如圖,在helloworld.sh 中增加 echo $d:


    如果不將 d 提升為全局變量,helloworld.sh 并不會打印出 d 的值:

    [xiaobai@hadoop100 datas]$ vi helloworld.sh [xiaobai@hadoop100 datas]$ echo $d i love China [xiaobai@hadoop100 datas]$ ./helloworld.sh hello world

    使用 “ export d ” 將d提升為全局變量,重新打印helloworld.sh :

    [xiaobai@hadoop100 datas]$ export d [xiaobai@hadoop100 datas]$ ./helloworld.sh hello world i love China

    3.3 特殊變量:$n

  • 基本語法
  • $n (功能描述:n為數字,$0代表該腳本名稱,$1-$9代表第一到第九個參數,🔟以上的參數需要用大括號 { }包含,如${10})

  • 案例
  • 1). 輸出該腳本文件名稱、輸入參數1和輸入參數2的值:

    [xiaobai@hadoop100 datas]$ touch parameter.sh [xiaobai@hadoop100 datas]$ vi parameter.sh #!/bin/bashecho "$0 $1 $2 $3"

    2). 第 $0 個參數是 parameter.sh 腳本本身,$1是輸入的第一個參數,$2是輸入的第二個參數,$3是輸入的第三個參數,由于只定義了三個參數,所以$3后輸入的參數不能被打印出來。

    [xiaobai@hadoop100 datas]$ bash parameter.sh parameter.sh [xiaobai@hadoop100 datas]$ bash parameter.sh i parameter.sh i [xiaobai@hadoop100 datas]$ bash parameter.sh i love parameter.sh i love [xiaobai@hadoop100 datas]$ bash parameter.sh i love China parameter.sh i love China [xiaobai@hadoop100 datas]$ bash parameter.sh i love China so much parameter.sh i love China

    3.4 特殊變量:$#

  • 基本語法
  • $# (功能描述:獲取所有輸入參數個數,常用于循環)。

  • 案例
  • 獲取輸入參數的個數:

    [xiaobai@hadoop100 datas]$ vi parameter.sh #!/bin/bashecho "$0 $1 $2 $3"echo $# [xiaobai@hadoop100 datas]$ chmod 777 parameter.sh [xiaobai@hadoop100 datas]$ ./parameter.sh China is the best country ./parameter.sh China is the 5 [xiaobai@hadoop100 datas]$ ./parameter.sh coming ./parameter.sh coming 1

    3.5 特殊變量:$* 、 $@

  • 基本語法
  • $* (功能描述:此變量代表命令行中所有的參數,$* 把所有的參數看成一個整體);

    $@ (功能描述:此變量也代表命令行中所有參數,不過$@把每個參數區分對待)。

  • 案例
  • [xiaobai@hadoop100 datas]$ vi parameter.sh #!/bin/bashecho "$0 $1 $2 $3"echo $# echo $* echo $@[xiaobai@hadoop100 datas]$ ./parameter.sh China is the best country ./parameter.sh China is the 5 China is the best country China is the best country

    3.6 特殊變量:$?

  • 基本語法
  • $?(功能描述:最后一次執行的命令的返回狀態。如果此變量值為0,證明上一個命令正確執行;如果此變量值為非0,則證明上一個命令執行錯誤)。

  • 案例
  • 判斷 helloworld.sh 腳本是否正確執行:

    [xiaobai@hadoop100 datas]$ ./helloworld.sh hello world i love China [xiaobai@hadoop100 datas]$ echo $? 0

    四、運算法

  • 基本語法
  • 1). " $((運算式))" / "$[運算式]"

    2). expr + - \* / % 加減乘除取余

    tips:
    expr運算符間需?空格。

  • 案例
  • 1). 計算 10+5 的值:

    [xiaobai@hadoop100 datas]$ expr 10 + 5 15

    2). 計算 10-5 的值:

    [xiaobai@hadoop100 datas]$ expr 10 - 5 5

    3). 計算 (10+5) x 4 的值:
    a. expr 一步完成計算

    [xiaobai@hadoop100 datas]$ expr `expr 10 + 5` \* 4 60

    tips: 嵌套expr使用 ` 而非 ‘ 。

    b. 采用 $[運算式] 方式:

    [xiaobai@hadoop100 datas]$ s=$[(10+5)*4] [xiaobai@hadoop100 datas]$ echo $s 60

    五、條件判斷

  • 基本語法
  • [ condition ] (tips:condition前后有空格)

    注:條件非空即為true,[ balabala ] 返回true, []返回false。

  • 常用判斷條件
  • 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)

  • 案例
  • 1). 30是否大于等于25:

    [xiaobai@hadoop100 datas]$ [ 30 -ge 25 ] [xiaobai@hadoop100 datas]$ echo $? 0

    30是否小于等于25:

    [xiaobai@hadoop100 datas]$ [ 30 -le 25 ] [xiaobai@hadoop100 datas]$ echo $? 1

    2). batch.sh是否具有寫權限

    [xiaobai@hadoop100 datas]$ [ -w batch.sh ] [xiaobai@hadoop100 datas]$ echo $? 0

    3). /home/xiaobai/welcome.txt 目錄中的文件是否存在:

    [xiaobai@hadoop100 datas]$ [ -e /home/xiaobai/welcome.txt ] [xiaobai@hadoop100 datas]$ echo $? 0

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

    [xiaobai@hadoop100 datas]$ [ condition ] && echo OK || echo notOK OK [xiaobai@hadoop100 datas]$ [ condition ] && [ ] || echo notOK notOK

    六、流程控制

    6.1 if判斷

  • 基本語法
  • if [ 條件判斷式 ]; then # 程序 fi# 或if [ 條件判斷式 ]then # 程序 fi

    注:
    if后空格! [ 條件判斷式 ]中括號和判斷式之間需有空格;

  • 案例
  • 輸入一個數字,若輸入1,則輸出the number is one;若輸入2,則輸出the number is two;若輸入其他,則不輸出任何;

    [xiaobai@hadoop100 datas]$ touch if.sh [xiaobai@hadoop100 datas]$ vi if.sh #!/bin/bashif [ $1 -eq 1 ] thenecho "the number is one" elif [ $1 -eq 2 ] thenecho "the number is two" fi

    需運行帶參數的if.sh腳本:

    [xiaobai@hadoop100 datas]$ bash if.sh if.sh: line 3: [: -eq: unary operator expected if.sh: line 6: [: -eq: unary operator expected [xiaobai@hadoop100 datas]$ bash if.sh 1 the number is one [xiaobai@hadoop100 datas]$ bash if.sh 2 the number is two [xiaobai@hadoop100 datas]$ bash if.sh 3 [xiaobai@hadoop100 datas]$

    6.2 case 語句

  • 基本語法
  • case $變量名 in "值1") # 如果變量的值等于值1,則執行程序1;;"值2") # 如果變量的值等于值1,則執行程序1;;# ...其他分支...*) # 若變量的值與以上都不符,則執行此default程序;; esac

    注:

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

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

    3). 最后的 “ *) ” 表示默認模式,相當于java中的default。

  • 案例
  • 1). 輸入一個數字,若輸入1,則輸出the number is one;若輸入2,則輸出the number is two;若輸入其他,則不輸出任何;

    [xiaobai@hadoop100 datas]$ touch case.sh [xiaobai@hadoop100 datas]$ vi case.sh #!/bin/bash#!/bin/bashcase $1 in 1)echo " the number is one" ;;2)echo " the number is two" ;;*)echo "the other number except the two choice" ;; esac [xiaobai@hadoop100 datas]$ bash case.sh 1the number is one [xiaobai@hadoop100 datas]$ bash case.sh 2the number is two [xiaobai@hadoop100 datas]$ bash case.sh 3 the other number except the two choice [xiaobai@hadoop100 datas]$ bash case.sh a the other number except the two choice

    6.3 for 循環

  • 基本語法1
  • for(( 初始值; 循環控制條件;變量變化 ))do程序done
  • 案例
  • 從1?到100:

    [xiaobai@hadoop100 datas]$ touch for.sh [xiaobai@hadoop100 datas]$ vi for.sh #!/bin/bashs=0 for(( i=1;i<=100;i++ )) dos=$[$s+$i] done echo $s [xiaobai@hadoop100 datas]$ bash for.sh 5050
  • 基本語法2
  • for 變量 in 值1 值2 值3... do程序 done
  • 案例
  • 打印所有輸入參數:

    [xiaobai@hadoop100 datas]$ vim for2.sh

    不用引號的 $* 和 $@ 似乎無任何區別,都是將輸入元素按照順序單個輸出:

    #!/bin/bashfor i in $* doecho "the parameter you entered is $i" donefor j in $@ doecho "the parameter you entered is $j" done

    ??tips:
    用引號"" 引起來的 "$*“是將輸入的所有字符一次性全部輸出,
    而”$@"則是將輸入的所有字符按照輸入順序一個一個輸出。

    #!/bin/bashfor i in "$*" doecho "the all parameters you entered are $i" donefor j in "$@" doecho "the parameter you entered is $j" done [xiaobai@hadoop100 datas]$ bash for2.sh i have a dream the all parameters you entered are i have a dream the parameter you entered is i the parameter you entered is have the parameter you entered is a the parameter you entered is dream

    6.4 while 循環

  • 基本語法
  • while [ 條件判斷式 ]do# 程序done
  • 案例
  • 從1?到100:

    [xiaobai@hadoop100 datas]$ vim while.sh #!/bin/bashs=0 i=1 while [ $i -le 100 ] dos=$[$s + $i]i=$[$i + 1] done echo $s [xiaobai@hadoop100 datas]$ bash while.sh 5050

    tips:
    [條件判斷]不支持<= 運算符!須使用-le / -ge等;
    變量的值<=100, 表示為$i <= 100; 而不是變量i<=100.

    [ $i -le 100 ]表條件判斷[ 判斷式 ]前后須?空格,s=$[$i + $s]為運算符表運算不加空格!

    七、read讀取控制臺輸入 ??

  • 基本語法
  • read(選項)(參數)

    選項:
    -p:指定讀取值時的提示符;
    -t:指定讀取值時等待的時間(秒)。

    參數:
    變量:指定讀取值的變量名。

  • 案例
  • 提示7秒內,讀取控制臺輸入的名稱:

    [xiaobai@hadoop100 datas]$ vim read.sh #!/bin/bashread -t 7 -p "please input your name" NAMEecho $NAME [xiaobai@hadoop100 datas]$ bash read.sh please input your namexiaobai xiaobai

    八、函數

    8.1 系統函數

  • basename 基本語法
  • basename [string / pathname] [suffix]

    功能描述:若加了后綴suffix,則basename命令會刪掉所有的后綴包括最后一個( ’ / ') 字符,然后顯示出字符串。

    選項:
    suffix為后綴,為可選項,如果suffix被指定了,basename會將pathname或string中的suffix去掉。

    ??tips:
    basename 截取文件名稱,dirname截取文件路徑,組合使用可獲取文件全路徑!

  • 案例
  • 截取/home/xiaobai/welcome.txt路徑的文件名稱:

    [xiaobai@hadoop100 datas]$ basename /home/xiaobai/welcome.txt welcome.txt [xiaobai@hadoop100 datas]$ basename /home/xiaobai/welcome.txt .txt welcome
  • dirname 基本語法
  • dirname 文件絕對路徑;

    功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄),然后返回目錄。

  • 案例
  • 獲取welcome.txt文件的路徑:

    [xiaobai@hadoop100 datas]$ dirname /home/xiaobai/datas/while.sh /home/xiaobai/datas

    8.2 自定義函數

  • 基本語法
  • [ function ] funname[()] {Action;[return int;] } funname
  • 經驗技巧
  • 1). 必須在調用函數之前先聲明函數,shell腳本時逐行運行,不會先編譯再運行;
    2). 函數返回值只能通過$?系統變量獲得,可以顯式? return 返回,若不加return,則以最后一條命令運行結果作為返回值,return后跟數值n(0-255)。

  • 案例
  • 計算兩個輸入參數的和:

    [xiaobai@hadoop100 datas]$ vim sum.sh #!/bin/bashfunction sum() {s=0;s=$[$1+$2]echo $s } read -p "please input your parameter1:" p1 read -p "please input your parameter2:" p2sum $p1 $p2 [xiaobai@hadoop100 datas]$ bash sum.sh please input your parameter1:23 please input your parameter2:56 79

    九、Shell工具 ??

    9.1 cut

    cut,顧名思義,負責剪切數據;cut命令從文件的每一行剪切字節、字符和字段并輸出。

  • 基本語法
  • cut [選項參數] filename

    注:默認分隔符是制表符。

  • 常用選項參數說明
  • 選項參數功能
    -f列號,按列號提取
    -d分隔符,按照指定分隔符分割列
  • 案例
  • 1). 準備數據文件cut.txt:

    [xiaobai@hadoop100 datas]$ vim cut.txt welcome to China hh hha i am coming big data go go go!

    2). 切割cut.txt第二、三列:

    [xiaobai@hadoop100 datas]$ cut -d " " -f 2,3 cut.txt to China hha am coming datago

    3). 在cut.txt文件中切割出China:

    [xiaobai@hadoop100 datas]$ cat cut.txt welcome to China hh hha i am coming big data go go go! [xiaobai@hadoop100 datas]$ cat cut.txt | grep China welcome to China [xiaobai@hadoop100 datas]$ cat cut.txt | grep China | cut -d " " -f 3 China

    4). 選取系統PATH變量值,第二個“ : ” 開始后的所有路徑:

    [xiaobai@hadoop100 datas]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xiaobai/.local/bin:/home/xiaobai/bin [xiaobai@hadoop100 datas]$ echo $PATH | cut -d : -f 3- /usr/local/sbin:/usr/sbin:/home/xiaobai/.local/bin:/home/xiaobai/bin

    tips:
    -f 3- 表示第3列以后!

    5). 切割ifconfig后打印的IP地址:

    centos7如下:

    [xiaobai@hadoop100 datas]$ ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.31.100 netmask 255.255.255.0 broadcast 192.168.31.255inet6 fe80::2a3e:3aa4:e6cf:83e1 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:cf:e9:22 txqueuelen 1000 (Ethernet)RX packets 107043 bytes 7695379 (7.3 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 29534 bytes 6130394 (5.8 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[xiaobai@hadoop100 datas]$ ifconfig ens33 | grep -w "inet"inet 192.168.31.100 netmask 255.255.255.0 broadcast 192.168.31.255 [xiaobai@hadoop100 datas]$ ifconfig ens33 | grep -w "inet" | cut -d " " -f 10192.168.31.100

    如圖:centos7選擇ens33:
    如圖:inet前有8個空格!ip處在第10列!

    9.2 sed

    sed是一種流編輯器,一次處理一行內容。處理時把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”,接著用sed命令處理緩沖區中的內容并將其輸出屏幕。
    不斷重復直至文件末尾。

    tips: 文件內容并無改變,除非使用重定向。

  • 基本語法
  • sed [選項參數] ‘command’ filename

  • 選項參數說明
  • 選項參數功能
    -e直接在指令列模式上進行sed的動作編輯
  • 常用命令功能描述
  • 命令功能
    a新增,a后面可接字符串,在下一行出現
    d刪除
    s查找并替換

    tips:
    a在前,d在后,如:sed "2a Shanghai" sed.txt,sed "/hh/d" sed.txt 。

  • 案例
  • 1). 準備數據文件sed.txt

    [xiaobai@hadoop100 datas]$ vim sed.txt welcome to China hh hha i am coming big data go go go!

    2). 將“Shanghai”插入到sed.txt第二行下面并打印出來:

    [xiaobai@hadoop100 datas]$ sed "2a Shanghai" sed.txt welcome to China hh hha Shanghai i am coming big data go go go!

    注:原文件并未改變!只是改變控制臺輸出內容!

    [xiaobai@hadoop100 datas]$ cat sed.txt welcome to China hh hha i am coming big data go go go!

    3). 刪除sed.txt 文件中包含hh的行:

    [xiaobai@hadoop100 datas]$ sed "/hh/d" sed.txt welcome to China i am coming big data go go go!

    4). 將sed.txt 文件中hh替換為wa:

    [xiaobai@hadoop100 datas]$ sed "s/hh/wa/g" sed.txt welcome to China wa waa i am coming big data go go go!

    tips: ’ g ’ 表示global全局替換,若不加g則替換第一個出現的字符。

    5). 將sed.txt 文件中的第二行刪除并將go替換成come:

    [xiaobai@hadoop100 datas]$ sed -e "2d" -e "s/go/come/g" sed.txt welcome to China i am coming big data come come come!

    9.3 awk

    awk是一個強大的文本分析工具,將文件逐行讀入,以空格為默認分隔符將行切片,對切開的部分再進行分析處理。

  • 基本語法
    awk [] 'pattern1{action1} pattern2{action2} … ’ filename
  • pattern: 表示awk在數據中查找的內容,就是匹配模式;
    action: 在找到匹配內容時所執行的一系列命令

  • 常用選項參數說明
  • 選項參數功能
    -F指定輸入文件分隔符
    -v賦值一個用戶定義變量
  • 案例
  • 1). 準備數據文件passwd:

    [xiaobai@hadoop100 datas]$ sudo cp /etc/passwd ./

    passwd所屬權限為root,可更改為當前用戶xiaobai:

    -rw-r--r--. 1 root root 2388 Sep 24 20:57 passwd [xiaobai@hadoop100 datas]$ sudo chown xiaobai:xiaobai passwd -rw-r--r--. 1 xiaobai xiaobai 2388 Sep 24 20:57 passwd

    2). 搜索passwd文件以root關鍵字開頭的所有行,并輸出第7列:

    [xiaobai@hadoop100 datas]$ awk -F : '/^root/ {print $7}' passwd /bin/bash

    3). 搜索passwd文件以root關鍵字開頭的所有行,并輸出第1列和第7列,中間以“ , ” 分割:

    [xiaobai@hadoop100 datas]$ awk -F : '/^root/ {print $1","$7}' passwd root,/bin/bash

    tips:
    只有匹配了pattern的行才會執行action。

    4). 只顯示/etc/passwd的第1列和第7列,以“ , ” 分割,且在首行前面添加列名“user,shell”; 在末尾一行添加"shell, /bin/hadoop" :

    [xiaobai@hadoop100 datas]$ awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print"shell,/bin/hadoop"}' passwd


    **🌟注:**BEGIN表示在讀取所有數據行之前執行;END表示在所有數據行執行之后執行。

    5). 將passwd文件中的用戶id增加數值1并輸出:

    [xiaobai@hadoop100 datas]$ awk -F : -v i=1 '{print $3+i}' passwd 1 2 3 4 5 6 . . . 989 73 71 1001 1002 1003
  • awk 的內置變量
  • 變量說明
    FILENAME文件名
    NR已讀的記錄數
    NF瀏覽記錄的域的個數(切割后列的個數)
  • 案例
  • 1). 統計passwd文件名,每行的行號,每行的列數:

    [xiaobai@hadoop100 datas]$ awk -F : '{print FILENAME "," NR "," NF}' passwd passwd,1,7 passwd,2,7 passwd,3,7 passwd,4,7 passwd,5,7 passwd,6,7 . . . passwd,40,7 passwd,41,7 passwd,42,7 passwd,43,7 passwd,44,7 passwd,45,7 passwd,46,7

    2). 切割ip:

    [xiaobai@hadoop100 datas]$ ifconfig ens33 | grep -w "inet" | awk -F " " '{print $2}' 192.168.31.100

    tips: 使用awk切割ip時,前面的8個空格又不算了😭,試出來的。

    3). 查詢awk.txt中空行所在的行號:

    [xiaobai@hadoop100 datas]$ vim awk.txt welcome to China hh hhai am coming big data go go go! [xiaobai@hadoop100 datas]$ awk '/^$/ {print NR}' awk.txt 3

    9.4 sort ??

    sort命令在Linux中非常有用,它將文件進行排序,并將排序結果標準輸出。

  • 基本語法
  • sort(選項)(參數)

    選項說明
    -n按照數值的大小排序
    -r以相反的順序來排序
    -t設置排序時所用的分割字符
    -k指定需要排序的列

    參數:指定待排序的文件列表。

  • 案例
  • 1). 準備數據文件sort.sh:

    [xiaobai@hadoop100 datas]$ vim sort.sh a:10:4.1 b:23:3.2 c:54:2.6 d:10:6.7 e:36:8.9 f:65:2.0 g:76:5.8

    2). 按照" : " 分割后的第三列倒序排序:

    [xiaobai@hadoop100 datas]$ sort -t : -nrk 2 sort.sh g:76:5.8 f:65:2.0 c:54:2.6 e:36:8.9 b:23:3.2 d:10:6.7 a:10:4.1

    十、真題

  • 使用Linux命令查詢file1中空行所在的行號:
  • [xiaobai@hadoop100 datas]$ awk '/^$/ {print NR}' awk.txt 3
  • 有文件chengji.txt如下:
    張三 40
    李四 50
    王五 60
    使用Linux命令計算第二列的和并輸出:

    [xiaobai@hadoop100 datas]$ cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}' 150
  • Shell腳本里如何檢查一個文件是否存在?若不存在該如何處理?
    測試已存在文件awk.txt:
  • #!/bin/bashif [ -f awk.txt ]; thenecho "the file exist!" elseecho "the file is not exist!" fi [xiaobai@hadoop100 datas]$ bash ifexist.sh the file exist!

    測試未存在文件file.txt:

    [xiaobai@hadoop100 datas]$ vim ifexist.sh #!/bin/bashif [ -f file.txt ]; thenecho "the file exist!" elseecho "the file is not exist!" fi [xiaobai@hadoop100 datas]$ bash ifexist.sh the file is not exist!

  • 用Shell寫一個腳本,對文本中無序的一列數字排序:
  • [xiaobai@hadoop100 datas]$ vim test.txt 3 4 6 7 8 1 2 10 9 5 [xiaobai@hadoop100 datas]$ sort -n test.txt 1 2 3 4 5 6 7 8 9 10

    對上述test.txt 無序文本進行排序并求和:

    [xiaobai@hadoop100 datas]$ sort -n test.txt | awk '{a+=$0;print$0} END{print "sum="a}' 1 2 3 4 5 6 7 8 9 10 sum=55

    tips: $0表示第一列!

  • 請用Shell腳本寫出查找當前文件夾(/home)下所有的文本文件內容中包含字符"China"的文件名稱:
  • [xiaobai@hadoop100 datas]$ grep -r China /home grep: /home/Goodbai: Permission denied /home/xiaobai/.bash_history:d="i love China" /home/xiaobai/.bash_history:bash parameter.sh i love China /home/xiaobai/.bash_history:bash parameter.sh i love China so much /home/xiaobai/.bash_history:./parameter.sh China is the best country /home/xiaobai/.bash_history:./parameter.sh China is the best country /home/xiaobai/datas/batch.sh:echo "Welcome to China" >> welcome.txt /home/xiaobai/datas/cut.txt:welcome to China /home/xiaobai/datas/sed.txt:welcome to China /home/xiaobai/datas/awk.txt:welcome to China /home/xiaobai/welcome.txt:Welcome to China grep: /home/Tom: Permission denied

    總結

    以上是生活随笔為你收集整理的Shell脚本语言常用命令总结~的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 金鱼妻日剧免费观看完整版全集 | 国产91国语对白在线 | 久久少妇视频 | 日本少妇bbwbbw精品 | 国产情侣一区 | av三级| 成人三级在线看 | 中文字幕超清在线免费观看 | 福利网站在线观看 | 成人免费自拍视频 | 少妇人妻偷人精品无码视频 | 香蕉伊人 | 三级av片 | 99热这| 午夜丁香网 | sm久久捆绑调教精品一区 | 蜜臀尤物一区二区三区直播 | 国产精品影音先锋 | 18久久| 大咪咪dvd | 影音先锋国产 | 色肉色伦交av色肉色伦 | 亚洲欧美高清视频 | 日韩av在线一区二区 | 嫩草影院菊竹影院 | 亚洲国产视频在线观看 | 风间由美一区 | 一区二区在线视频免费观看 | 亚洲人成色777777精品音频 | 18精品爽国产白嫩精品 | 久久密 | 国产不卡毛片 | 亚洲激情社区 | 林天顾悦瑶笔趣阁 | 精品视频一区二区三区 | 成人综合av| 国产精品美女久久久久av超清 | 国产露脸国语对白在线 | 91调教视频 | 中文在线日本 | 久久久久久九九九九 | 日本成人黄色片 | 亚洲精品午夜 | 人人妻人人澡人人爽精品欧美一区 | 女人下部全棵看视频 | 国产成人无码精品久久久久久 | 在线免费观看你懂的 | 精品一级少妇久久久久久久 | 免费黄色大片 | 日本欧美中文字幕 | 成人精品免费在线观看 | 欧洲美女与动交zozzo | 污视频免费在线观看网站 | 亚洲中文字幕一区二区在线观看 | 久久精品视频免费播放 | 国产精品精品软件视频 | 午夜福利123 | 蜜桃av乱码一区二区三区 | 韩国一级片在线观看 | 国产无遮挡免费观看视频网站 | 成人网免费视频 | 欧美乱三级 | 国精产品一区一区三区在线 | 一本加勒比hezyo黑人 | 天堂中文资源在线观看 | 日韩激情视频在线观看 | 又黄又骚的视频 | 国产精品色视频 | 精品国产一区二区三区在线 | 少妇野外性xx老女人野外性xx | 在线免费观看网站入口在哪 | 国产日韩欧美激情 | 手机看片日本 | 亚洲国产免费av | 91在线网站 | 色老头在线一区二区三区 | 亚洲成人av影片 | 一级全黄裸体免费观看视频 | 伊人一级| 成人无码av片在线观看 | 91成人在线观看高潮 | 翔田千里x88aⅴ | 免费无毒av | 91国自啪| 亚洲a人 | 国产一区二区三区四区五区美女 | 国产精品伦一区二区三区 | 99视频在线免费 | 午夜精品久久久久久久蜜桃 | 国产草草影院 | 精品一性一色一乱农村 | 色www国产亚洲阿娇 自拍一区在线 | 国产99久久九九精品无码 | 国产午夜精品一区二区三区四区 | 开心成人激情 | 美女xx00| 久草资源站 | av网站黄色 | 色综综 |