0

We have simple Windows batch files that when an error occurs, an "ONCALL.bat" file is run to display support information that is maintained in a separate oncall.txt text file. This is our SOP.

ONCALL.BAT:

set scriptpath=%~dp0

TYPE "%scriptpath%oncall.txt"

I have zero experience with Unix and Shell scripts and I need to quickly provide a shell script equivalent to run in a Unix environment.

Could someone please provide me the .sh equivalent of this code?

4

2 回答 2

1

假设帮助文件和脚本在同一个目录下:

#!/bin/sh

SCRIPTPATH=`dirname "$0"`

cat "$SCRIPTPATH"/oncall.txt

$0是当前脚本的文件路径;该dirname命令提取它的目录部分。这样,您可以避免在脚本中为帮助文件使用硬编码路径。

于 2012-11-21T20:14:00.170 回答
1
cat oncall.sh
#!/bin/bash
scriptpath=/path/to/scripts

cat ${scriptpath}/oncall.txt

创建文件后,运行不会有什么坏处

 dos2unix oncall.sh

只是为了确保没有 Windows Ctrl-M 字符会完全使您迷惑他们可以搞砸 Unix 脚本处理的方式。

然后

 chmod 755 oncall.sh

使脚本可执行。

确认

  ls -l oncall.sh

你应该看到像这样的列表

-rwxr-xr-x 1 userName grpname  5263 Nov 21 14:44 oncall.sh

最后,用完整或相对路径调用脚本,即

  ./oncall.sh

或者

  $PWD/oncall.sh

第一行称为“shebang”行,当您的脚本被调用时,操作系统会读取文件的第一行,以找出运行什么程序来解释脚本文件的其余部分。

您可能希望/需要使用以下之一作为第一行“shebang”,但 bash 是一个不错的猜测

 #!/bin/ksh
 #!/bin/sh
 #!/bin/ash
 #!/bin/dash
 #!/bin/zsh

或者您可能在最坏的情况下,您的外壳位于非标准目录中,那么您必须将其拼写出来,即

 #!/usr/bin/ksh

所有 shell 都支持跟踪和变量扩展的调试参数,例如

  #!/bin/ksh -vx

或者您可以仅包装某些行以打开和关闭调试,例如

  set -vx
   cat ${scriptpath}/oncall.txt
  set +vx

鉴于

% 和 0 之间的 ~dp 特殊语法基本上表示扩展变量 %0 以显示驱动器号和路径,从而为您提供包含批处理文件的当前目录!

我认为这/path/to/scripts是一个合理的替代品,scriptpath=$PWD可以直接替代,因为 Unix 中没有驱动器号。那里的问题是,您要么依靠 unix PATH var 来查找脚本,要么cd /path/to/scripts然后./oncall.sh使用相对路径运行./以查找文件,而无需向 PATH 添加值。

IHTH。

于 2012-11-21T20:12:15.727 回答