我有这样的shell脚本。
line="$@" # get the complete first line which is the complete script path
name_of_file = ${line%.*}
file_extension = ${line##*.}
if [ $file_extension == "php"]
then
ps aux | grep -v grep | grep -q "$line" || ( nohup php -f "$line" > /var/log/iphorex/$name_of_file.log & )
fi
if [ $file_extension == "java"]
then
ps aux | grep -v grep | grep -q "$line" || ( nohup java -f "$name_of_file" > /var/log/iphorex/$name_of_file.log & )
fi
此处,行变量的值为/var/www/dir/myphp.php
或/var/www/dir/myjava.java
。
shell脚本的目的是检查这些进程是否已在运行,如果没有,我会尝试运行它们。我收到以下错误。
name_of_file: command not found
file_extension: command not found
[: missing `]'
[: missing `]'
有什么想法吗?
答案 0 :(得分:3)
首先,shell处理器处理行:
name_of_file = ${line%.*}
执行命令:
name_of_file
参数:
= ${line%.*}
你需要把它写成:
name_of_file=${line%.*}
这使它成为一个变量=值。您还需要为file_extension =行重复此操作。
其次,if:
if [ $file_extension == "php"]
具有完全相同的解析问题,你必须在尾随之前有空格],因为否则解析器认为你正在检查$ file_extension是否等于字符串:“php]”< / p>
if [ $file_extension == "php" ]
答案 1 :(得分:1)
首先删除空格,也许这会有所帮助...
name_of_file=${line%.*}
file_extension=${line##*.}
修改强>
试试这个:
if [ $file_extension="php" ]
..
if [ $file_extension="java" ]
答案 2 :(得分:1)
other answers是正确的,您的脚本中的问题位于变量赋值和[ .. ]
语句中的杂散空间中。
(偏离主题.FYI)
我冒昧地重构你的剧本(未经测试!)只是为了突出一些替代方案,即:
pgrep
代替ps aux | grep .....
case
-
#!/bin/bash
line="$@" # get the complete first line which is the complete script path
name_of_file=${line%.*}
pgrep "$line" > /dev/null && exit # exit if process running
case "${line##*.}" in # check file extension
php)
nohup php -f "$line" > /var/log/iphorex/$name_of_file.log &
;;
java)
nohup java -f "$name_of_file" > /var/log/iphorex/$name_of_file.log &
;;
esac