Shell指令碼常用語法與命令

2021-09-20 06:31:14 字數 3630 閱讀 7098

5. 遠端執行命令

6. 迴圈遍歷目錄檔案

7. 對檔案逐行列印

8. 修改檔案格式(cr、crlf)

9. 用 awk 命令計算檔案某一列的總和

10. wait 等待所有子程序結束

11. shell 控制併發數執行

記錄我工作中寫指令碼經常用到的命令和用法

arrs=

("1"

"2")

for arr in$;

doecho

$arr

done

name=nickif[

[$name

=="nick"]]

;then

echo

"it's me."

elif[[

$name

=="chun"]]

;then

echo

"my wife."

else

echo

"others"

fi

之前遇到個情況, 我先定義了個變數arrs=("1" "2" "3"), 然後又執行arrs="a b c"。我以為字串"a b c"會覆蓋原來的陣列, 但是事實並沒有。只是把陣列第乙個元素值替換成了"a b c"。所以在使用之前用過的變數名之前,需要先刪除變數, 執行unset arrs

假設有變數var=

保留左數第乙個分隔符右邊的字串

echo $結果是

保留右數第乙個分隔符右邊的字串

echo $結果是scl323

保留右數第乙個分隔符左邊的字串

echo $結果是

保留左數第乙個分隔符左邊的字串

echo $結果是https:

$

var=

# 從左邊第幾個字元開始, 4表示字元總個數

$ echo

$blog

# 從左邊第幾個字元開始, 直到結束

$ echo

$blog.csdn.net/scl323

# 從右邊第幾個字元開始,3表示字元總個數

$ echo

$scl

# 從右邊第幾個字元開始, 直到結束

$ echo

$scl323

操作符

含義例子(值都為true)

==相等

「a」 == 「a」

!=不等於

「a」 != 「b」

=~包含

「nicksong」 =~ 「nick」

>

大於「2」 > 「1234」

<

小於「1234」 < 「2」

注意:

在搭集群的時候經常需要遠端執行命令

配置ssh免密登陸

ssh [options] [user@]host [command]

對目錄裡面的檔案進行迴圈遍歷

#! /bin/bash

forfilein`

ls`;do

echo

"檔名:"

$file

done

對檔案內容進行逐行列印

#! /bin/bash

cat /home/hdfs/data/t_s006_qh_bs_customer/cust_info.csv |

while

read line

doecho

$line

sleep 3

done

在 vim 中用set ff?命令可以檢視當前檔案是什麼格式的。

awk -f' ' -v sum=0 ' end'
#! /bin/bash

# 這樣能做到讓 test1 和 test2 並行執行

bash test1.sh &

bash test2.sh &

wait

echo

'all is done'

使用 fifo 命名管道對併發數進行控制,原理是將管道當做乙個執行緒池。

#!/bin/bash

# 需要併發執行的主**放到這個 function 裡面

function fun

################

# 建立命名管道 #

################

# 隨便定義個檔名 $$ 表示當前程序號

fifo_file=

"/tmp/$$.fifo"

# 用 mkfifo 命令建立管道檔案

mkfifo

$fifo_file

# 並將檔案描述符 6 和管道檔案繫結。

exec 6<

>

$fifo_file

# 繫結完成就可以刪除該管道檔案了。

rm -f $fifo_file

#################

# 初始化池子大小 #

#################

# 執行緒數

thread_num=10

for i in

$(seq 1 $thread_num);do

# 往這個檔案描述符裡寫 10 個 1

# 從這裡可以看到,前十個程序其實可以跟後十個程序通訊

echo 1 >

&6done

###########

# 執行主體 #

###########

# 待執行的陣列

arr=

$(seq 1 100)

# 遍歷陣列

for a in$;

do# 讀取檔案描述符裡面一行,該操作類似於佇列的 pop,讀完就刪除該行。

# 如果檔案描述符裡面沒有內容了,則會阻塞在這。所以讀完 10 個之後

# 就會在這裡阻塞,直到前面的程序執行完並往描述符裡增加一行。

read -u6 &

# 注意,執行主方法和釋放鎖應該放一起並放到後台執行。

done

# 等待所有程序執行完成

wait

# 關閉該檔案描述符

exec 6>

&-

持續更新, 歡迎關注

Shell 常用語法

bin bash 選擇編譯環境 正文 i 1 echo i 1 echo i 1echo i i2.1賦值a 5 變數定義的時候必須是等號兩邊沒有空格 b 2c a b 變數賦值 7 d a b 字串 5 2 2.2從鍵盤輸入變數值echo please input a filename read ...

Shell 常用語法

賦值 file 1 兩邊不能有空格 echo file 邏輯判斷 表示式 1 if expression then fi 兩邊必須有空格 2 if expression then fi3 if expression1 o expression2 then elif expression then e...

shell指令碼程式設計 三)常用語法

目錄 if用法 case用法 sed用法 以條件表示式作為 if條件 檔案表示式if f file 如果檔案存在 if d 如果目錄存在 if s file 如果檔案存在且非空 if r file 如果檔案存在且可讀 if w file 如果檔案存在且可寫 if x file 如果檔案存在且可執行 ...