Вы не можете комбинировать многострочный встроенный вход (например, cat <<EOF
) с синтаксисом обратной линии. Выходы должны быть на одной линии.
Лучшее, что вы можете сделать, это [от оригинала]:
#!/bin/tcsh -f
cat > /tmp/data <<END
set pagesize 0 feedback off verify off heading off echo off;
select Count (*) from user where activeuser='+';
exit;
END
set count="`sqlplus -s [email protected] < /tmp/data`"
rm -f /tmp/data
set g = 44
echo $g
echo $count
set y = `expr $g - $count`
echo $y
UPDATE:
Это не действует в csh
:
#!/bin/tcsh -f
# badsyn
set val=`head -1 << EOF
abc
def
EOF`
echo "val is '$val'"
Он производит синтаксическая ошибка:
Unmatched `.
Вот ваш последний код с некоторыми примечаниями:
#!/bin/tcsh -f
# dummy variables
set Schemaname=foo
set password=bar
set SID=10
# BUG #1 -- csh needs a set command (i.e. "set current=" is correct but
# "current=" is a syntax error
# BUG #2 -- you want to capture the sqlplus output so you need to use
# backticks/virgules ("`") but they must be on the same line
current= sqlplus -s $Schemaname/[email protected]$SID <<END
set pagesize 0 feedback off verify off heading off echo off;
select Count (*) from usr where activeuser='+';
exit;
END
set total = 1981
echo $total
echo $current
# BUG #3 -- the brackets aren't valid in csh here
set y = [ `expr 1981 - $current`]
echo $y
Это может быть сделано без использования временного файла с помощью два сценариев. Вот первый один:
#!/bin/tcsh -f
# fix2a
###set echo verbose
# dummy variables
set Schemaname=foo
set password=bar
set SID=10
set current="`./fix2b -s $Schemaname/[email protected]$SID`"
set total = 1981
echo $total
echo $current
# BUG #3 -- the brackets aren't valid in csh here
set y = `expr 1981 - $current`
echo $y
Вот второй один:
#!/bin/tcsh -f
# fix2b
# dummy variables since I don't have sqlplus _or_ the database
alias sqlplus 'echo 1935 ; true'
sqlplus $argv <<END
set pagesize 0 feedback off verify off heading off echo off;
select Count (*) from usr where activeuser='+';
exit;
END
Это выход я получаю:
1981
1935
46
Я отформатировал ваш код, пожалуйста, проверьте, не сделал ли я что-то неправильно. Прочитайте [тур] (http://stackoverflow.com/tour). Просьба также описать ожидаемый результат. –
У вас есть несоответствующая обратная сторона на строке 'count = ...'. Трудно сказать, было ли это в оригинале или нет, поскольку обратные ссылки используются для форматирования. –
Я изменил мой вопрос, Пожалуйста, см. Вопрос. – Ganesan