期望脚本检查文件类型并在运行脚本

时间:2015-06-17 01:01:23

标签: linux unix expect

我正在尝试编写脚本来运行脚本,但在运行脚本之前,我想检查它是dos还是unix格式并相应地进行转换。以下是我到目前为止的情况:

spawn ssh root@login
expect "assword:"
send "myPass\r"
expect "#"
send "cd /myDir\r"
expect "#"

if head -1 *.sh | grep $'[\x0D]' >/dev/null  #check to see if dos or unix
   then   #if dos then convert to unix and change permissions
    dos2unix *.sh
    chmod 777 *.sh
   else   #else execute script
    ./*.sh
fi

expect "#"

我是否允许将if语句包含在expect脚本的中间?如何在if语句(dos2unix和chmod)之后执行多个命令。

1 个答案:

答案 0 :(得分:0)

不,你不能混合shell并且期望那样,但是你可以发送一个复杂的shell命令:

send "cd /myDir\r"
expect "#"
send {for f in *.sh; do head -1 "$f" | grep -q $'[\x0D]' && { dos2unix "$f"; chmod 777 "$f"; }; ./"$f"; done}
send "\r"
expect "#"