2016-07-28 90 views
2

我試圖將cd設置到腳本中的任何變量的md5散列中,但我沒有得到md5的正確值,我認爲它與我的關係有關聲明我的變量。感謝您的任何幫助!設置外殼腳本命令輸出的變量

#!/bin/bash 
var1=$1 
md5=$(-n $var1 | md5sum) 
cd /var/www/html/$md5 

我預期的要帶我去通過MD5哈希給出的目錄:

$ ./myscript hello 
(no output) 
$ pwd 
/var/www/html/5d41402abc4b2a76b9719d911017c592 

相反,它給我的錯誤,並試圖cd到錯誤的路徑:

$ ./myscript hello 
./myscript: line 3: -n: command not found 
./myscript: line 4: cd: /var/www/html/d41d8cd98f00b204e9800998ecf8427e: No such file or directory 
$ pwd 
/home/me 

錯誤地嘗試cd到的md5sum也是相同的,無論我輸入哪個值。

+0

你在那個變量中得到了什麼? –

+0

無論我通過什麼變量 –

+0

,它每次都輸出相同的md5哈希是否之前創建了具有md5sum的文件夾?即對於所有有效的輸入參數,是否存在具有其散列值的目標文件夾? – Inian

回答

0

這可以作爲一個解決方案,任何人有這個問題

#!/bin/bash 
md5=$* 
hash="$(echo -n "$md5" | md5sum)" 
cd /var/www/html/$hash 
+0

這將不會導航到散列目錄名稱路徑,因爲該腳本在未反映出來的子shell上執行。請參閱我上面的答案! – Inian

+0

@Inian你所要做的就是「.md5 name」 –

+0

我不確定那是什麼意思! – Inian

0

您的腳本:

#!/bin/bash 
var1=$1 
md5=$(-n $var1 | md5sum) 
cd /var/www/html/$md5 

這有幾個問題:

  1. -n是不是一個有效的命令在管道-n $var1 | md5sum
  2. md5sum返回的不僅僅是MD5摘要。
  3. 更改腳本中的目錄不會反映在調用shell中。
  4. 輸入未加引號使用。

我會寫一個shell功能對於這一點,而不是一個腳本:

function md5cd { 
    dir="$(printf "%s" "$1" | md5sum - | cut -d ' ' -f 1)" 
    cd /var/www/html/"$dir" || return 1 
} 

的函數計算使用md5sum並切斷文件名(-)這是一部分的給定字符串的MD5摘要輸出。然後它將目錄更改爲指定的位置。如果目標目錄不存在,則通過返回非零退出狀態來指示該目標。

它延伸到cd在命令行上的路徑構建的路徑,但與最後的路徑元素變成一個MD5摘要(只是爲了好玩):

function md5cd { 
    word="${1##*/}" 

    if [[ "$word" == "$1" ]]; then 
    prefix="." 
    else 
    prefix="${1%/*}" 
    fi 

    dir="$(cut -d ' ' -f 1 <(printf "%s" "$word" | md5sum -))" 
    cd "$prefix"/"$dir" || return 1 
} 

測試它:

$ pwd 
/home/myself 

$ echo -n "hex this" | md5sum 
990c0fc93296f9eed6651729c1c726d4 - 

$ mkdir /tmp/990c0fc93296f9eed6651729c1c726d4 

$ md5cd /tmp/"hex this" 

$ pwd 
/tmp/990c0fc93296f9eed6651729c1c726d4 
相關問題