如何使用shell脚本命令变量?

时间:2015-05-07 18:45:43

标签: shell

以下命令效果很好:

psql -h localhost -U user dados -f /etc/bkpdb/04-03-2015.sql&

但是,当我在其中使用变量时:

valor=04-03-2015
psql -h localhost -U user dados -f /etc/bkpdb/$valor.sql&

它不起作用。

发生以下错误:

.sql: No such file or directory2015

2 个答案:

答案 0 :(得分:1)

您的代码运行正常,问题是您的文件保存在Windows上,其中行以\r\n而不是Unix \n结束。

您可以告诉我,因为错误消息中有奇怪的尾随2015。它到达那里是因为该工具旨在写出如下消息:

psql: failed: /etc/bkpdb/04-03-2015\r.sql: No such file or directory

但是由于回车\r,光标移动到列的开头,并开始覆盖消息的开头:

p̶s̶q̶l̶:̶ ̶f̶a̶i̶l̶e̶d̶:̶ ̶/̶e̶t̶c̶/̶b̶k̶p̶d̶b̶/̶0̶4̶-̶0̶3̶-2015
.sql: No such file or directory

你因此离开了:

.sql: No such file or directory2015

要解决此问题,只需在文本编辑器中或dos2unixfromdostr -d '\r'将文件从Windows / DOS格式转换为Unix即可。来自bash tag wiki

步骤#1的问题解决了
  1. 检查您的脚本或数据是否具有DOS样式的行尾字符

    • 使用cat -v yourfileecho "$yourvariable" | cat -v

      DOS回车将在每行后显示为^M

      如果找到它们,请使用dos2unix(a.k.a。fromdos)或tr -d '\r'

    • 删除它们

答案 1 :(得分:-2)

尝试:

valor=04-03-2015
psql -h localhost -U user dados -f /etc/bkpdb/${valor}.sql &