2012-03-10 145 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

相关问题