我是unix和shell脚本的新手。要求是检查变量中声明的文件路径中的文件。 说,
Filepath=/home/kvs/sample
Filename=abc.xml
现在我需要创建一个命令来检查$ Filepath / $ Filename中的文件。 我需要在文件名中剪切扩展名并将其保存在新变量中。 说,
FNAME=abc
现在我需要在$ FNAME中创建一个空文件(0byte),文件名相同但扩展名为abc.cnf
我已尝试过以下内容。
Filepath=/home/kvs/sample
Filename=abc.xml
FNAME=($Filepath/$Filename | cut -f 1 -d '.'); touch($FNAME .cnf)
帮我解决这个问题。
答案 0 :(得分:0)
这应该有效:
$ [[ -f ${Filepath}/${Filename} ]] && { touch ${Filepath}/${Filename%.*}.cnf ; }
第一部分([[ -f ${Filepath}/${Filename} ]]
)检查文件是否存在。这将检查"常规文件"我相信 - 这是你正在寻找的。您可以执行其他检查......
第二部分({ touch ${Filepath}/${Filename%.*}.cnf ; }
)仅在文件存在时执行,并通过将扩展名更改为.cnf来创建与原始文件具有相同路径/基本名称的空文件。
答案 1 :(得分:0)
请尝试man test
获取使用if [ -f filename]; then
测试文件的说明
如果您想要等号的第二个unix命令,请在$()
中使用fname=$(echo "${filepath}/${filename}" | cut -f 1 -d '.')
当人们发现你应该使用printf
而不是echo
时(首先让这个工作),不要感到困惑。
当人们发现你应该使用${filename%.*}
代替cut
时,不要感到困惑(首先让这个工作,你发现cut
很好。)
使用大括号的大括号,touch ${FNAME}.cnf
没有空格
使用ls -a .cnf
查看您是否有空文件
使用小写变量名称,它们不会与保留名称冲突
很高兴你今天学到了新东西。