2012-03-10 54 views
0

我想編寫一個shell腳本,我將從用戶那裏接受一行輸入,它將包含一些xxx.cpp作爲文件名。 我想在另一個變量中獲得「xxx」。 例如linux shell腳本:從用戶輸入字符串獲取文件名

如果用戶輸入給如:

some params path/to/file/xyz.cpp more p/ara/ms 

我想要得到它 「的.cpp」 之前和 「/」 前 「的.cpp」

+0

[提取文件名和擴展在bash]的可能重複(http://stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash) – 2012-03-10 19:00:09

+0

如果輸入是什麼「CP/b .cpp/a.cpp.f.cpp/foo.cpp cpp/cpp.cpp/b.cpp「你需要澄清你所要求的。 – 2012-03-11 03:37:01

+0

它不會發生.. 用戶只會給一個***。cpp filename – 2012-03-11 03:55:44

回答

1

使用basename [param] [.ext]的最後一次出現後發生的xyz。

echo `basename $1 .cpp` 

其中1是path/to/file.xyz在參數列表中的索引。

+0

我沒有得到「index of」的含義..?如果我輸入爲: [some params path/to/file/ – 2012-03-11 03:59:51

+0

@NDThokare,如果它是完整的命令行,其中一些是運行的程序,那麼'some'的索引是0,'params'的索引是1,'path/to/file/xyz.cpp'的索引是1。是2. – khachik 2012-03-11 10:07:51

0

下面是一個示例bash腳本,以提示用戶對文件的列表和過濾所有的輸入,並僅顯示在「的.cpp」結尾的文件的基本名稱(帶的.cpp移除),並且是可讀

#!/bin/bash 
echo Enter list of files: 
read list_of_files 
for file in $(echo $list_of_files); do 
    if echo $file | grep '\.cpp$' > /dev/null; then 
     if [[ -r $file ]]; then 
      fn=$(basename ${file}) 
      fn=${fn%.*} 
      echo $fn 
     fi 
    fi 
done 
+0

如果我運行這個腳本,它不會在命令行上進行任何輸入。 我想讀取用戶的輸入並用它來提取文件名。 – 2012-03-10 19:48:11

+0

好的我修好了,所以它會提示你輸入,而不是使用腳本 – amdn 2012-03-10 21:41:00

+0

的參數給出錯誤:[[:未在「完成」行找到 – 2012-03-11 03:53:27