1. 程式人生 > >shell的一些操作擷取字串,生成隨機數,讀檔案迴圈

shell的一些操作擷取字串,生成隨機數,讀檔案迴圈

按指定字元擷取字串
方法一

#!/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;