2015-06-19 97 views
0

我有以下代碼:生成在殼的隨機密碼與一個特殊字符

</dev/urandom tr -dc '[email protected]#$%&_+=' | head -c 16 

其隨機產生的密碼完美。

我想兩個轉變:

  1. 它應該只包含上面
  2. 一個特殊字符上市應該選擇一個隨機長度

length = $(($RANDOM%8+9))

試圖再敷上長度as

</dev/urandom tr -dc '[email protected]#$%&_+=' | head -c$length 

但沒有得到正面結果。

+1

'length = ...'與空格是不是一個有效的外殼分配。我假設這不是你用長片做的問題。對於第一部分,您需要驗證並丟棄我認爲不匹配的密碼。或者使用「隨機」密碼生成器,如「pwqgen」(注意:不是「pwgen」)。 –

回答

3
#! /bin/bash 
chars='@#$%&_+=' 
{ </dev/urandom LC_ALL=C grep -ao '[A-Za-z0-9]' \ 
     | head -n$((RANDOM % 8 + 9)) 
    echo ${chars:$((RANDOM % ${#chars})):1} # Random special char. 
} \ 
    | shuf \ 
    | tr -d '\n' 
  • LC_ALL=C防止字符如R出現。
  • grep -o僅輸出匹配的子字符串,即單個字符。
  • shuf洗牌行。我原來使用sort -R,但它保持相同的字符在一起([email protected])。
+0

非常感謝@choroba :) :) :) –

+0

@ArpitParasana:檢查改進後的版本。 – choroba

+0

只是爲了清楚:'$ {chars:$((RANDOM%8)):1}'=>'$ {chars:$((RANDOM%$ {#chars})):1}'。或者它是不相關的?爲什麼8? –