shell的一些操作擷取字串,生成隨機數,讀檔案迴圈
阿新 • • 發佈:2018-11-22
按指定字元擷取字串
方法一
#!/bin/bash
string="fuck,you,frank"
array=(${string//,/ })
for var in ${array[@]}
do
echo $var
done
方法二
#!/bin/bash
string="fuck,you,frank"
OLD_IFS="$IFS"
IFS=","
array=($string)
IFS="$OLD_IFS"
for var in ${array[@]}
do
echo $var
done
比用管道好使些,且這個方法可以保留分割字串中的空格和換行
字串拼接
$value1=home
$value2=${value1}"="
echo $value2
或者
var1="fuck"
var2="frank"
var3=${var1}${var2}
var4=${var1}"you"${var2}
echo $var3
echo $var4
計算陣列或者字串長度
#取得陣列元素的個數 length=${#NAME[@]} echo -e $length "\n" #或者 length=${#NAME[*]} echo -e $length "\n" #取得陣列單個元素的長度 lengthn=${#NAME[0]} echo -e $lengthn "\n"
分割帶有空格和換行符的字串到陣列
arr=($string)
迴圈讀檔案,且可以改變迴圈內的變數值
index=0
while read line
do
echo $line
index=$[$index+1]
done < filename.txt
echo $index
如果用
cat file|while read line
do
index=$[index+1]
done
由於用管道去讀檔案,index值不改變
生成隨機數
#加入時間戳,再獲得當前時間的納秒資料,精確到億分之一秒。 #這個相當精確了,就算在多cpu,大量迴圈裡面,同一秒裡面,也很難出現相同結果 #用它來做隨機數的基數獲得隨機數。 date +%s%N #獲得隨機數返回值,shell函式裡算出隨機數後,更新該值 function random() { min=$1; max=$2-$1; num=$(date +%s+%N); ((retnum=num%max+min)); #進行求餘數運算即可 echo $retnum; #這裡通過echo 打印出來值,然後獲得函式的,stdout就可以獲得值 #還有一種返回,定義全價變數,然後函式改下內容,外面讀取 } #得到1-10的seq資料項 for i in {1..10}; do out=$(random 2 10000); echo $i,"2-10000",$out; done;