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 如果檔案存在且可執行 ...