我有一个小的bash文件,我用来压缩PDF并进行其他一些文件操作。如果传递的文件名没有 .pdf
或 .PDF
扩展名,我想暂停执行此bash脚本。
# Take file name
fle_nme=$1
# Check if passed PDF file
# -ne - not equal
if ["${fle_nme: -4}" -ne ".pdf"] || ["${fle_nme: -4}" -ne ".PDF"]; then
echo "Incorrect file."
exit
fi
脚本失败但没有所需的消息:
[me@onthebox bashStuff ERR]$ compressPDF ~/bashFun/failWithThisExtension.bad
compressPDF.sh: line 16: [.bad: command not found
compressPDF.sh: line 16: [.bad: command not found
答案 0 :(得分:2)
在bash
中修复if条件,在[
,]
周围添加空格并始终记住引用变量并记住-ne
用于整数比较和 用于字符串比较。
fle_nme="$1"
if [ "${fle_nme: -4}" != ".pdf" ] || [ "${fle_nme: -4}" != ".PDF" ]; then
(或)您拥有相对较新版本的bash
,您可以设置nocasematch
选项,该选项适用于.pdf
和.PDF
shopt -s nocasematch
if [[ "${fle_nme: -4}" != ".pdf" ]]; then
..
shopt -u nocasematch
另外值得补充的是,您要设置的shell选项需要在比较完成后立即禁用。如果不是,该选项将传播到脚本的其余部分,这可能会影响您的其他字符串比较。
作为旁注,从文件名中提取扩展名的最佳方法是使用如下所示的参数扩展语法,这样您就不必担心包含文件扩展名的字符数
shopt -s nocasematch
if [[ "${fle_nme##*.}" != "pdf" ]]; then
答案 1 :(得分:1)
这不是正确的语法。它应该是:
-ne
正如Inian所说,你需要空间。此外,-a
用于数字比较。最后,使用.Pdf
代替括号内的和。
Inian的第二个选项最好,如果你还想允许.pDf
和.frm-find-people table td:nth-child(1) {
padding: 5px 15px;
width: 100px
}
.frm-find-people table td:nth-child(2) {
border: 1px solid red;
}
以及所有其他此类人选。