Могу ли я использовать hexdump в сценарии оболочки?

Могу ли я использовать hexdump в сценарии оболочки?

Когда я использую его, я продолжаю получать сообщение об ошибке.

синтаксическая ошибка рядом с неожиданным токеном «hexdump»

#!/bin/bash
#bash-hexdump
# Quick script to check delay of the shotpoints 

echo " please enter the complete line name as mentioned in the RAID2 "

read $line

cd /argus/raid2/"$line"


echo
echo " Entering the directory "
echo
for file in /argus/raid2/"$line"/*.ffid

hexdump -e "16 \"%_p\" \"\\n\"" $FFID | sed -n '68,73p' > list1 

done 

for filename in 'cat list1'
do 
sed -n 6p | awk '{print $1}' = $wd

cat list.txt | sed -n 1p | cut -c13-14 = $hh

cat list.txt | sed -n 1p | cut -c15-16 = $mm


cat list.txt | sed -n 2p | cut -c1-2 = $ss


done 

while [ true ]
do

$FFID=`ls -1rt $1 | grep -i ffid | tail -1`
echo " FFID value is : $FFID"
while [ $FFID = `ls -1rt $1 | grep -i ffid | tail -1` ]
do
hexdump -e "16 \"%_p\" \"\\n\"" $FFID | sed -n '68,73p' > list 
done
for filename in 'cat list'
 do 


             cat list.txt | sed -n 1p | cut -c13-14 = $hh1

             cat list.txt | sed -n 1p | cut -c15-16 = $mm1

             cat list.txt | sed -n 2p | cut -c1-2 = $ss1



done

$time1 = "$hh"":""$mm"":""$ss" ;

$time2 = "$hh1"":""$mm1"":""$ss1" ;

$former_seconds = $(date --date= "$time1" +%s);

$later_seconds = $(date --date= "$time2" +%s);

$time_delay = ( "$later_seconds" - "$former_seconds" ) 


$wb_time = ( "$wd" * 1.33 )

if 

(("$wb_time" + "$time_delay")) < 12.0

then 

 echo "please slow down"

 fi


 if [ -e  EOL.ffid ]
    then
            echo "EOL.ffid detected, exiting script"
            exit
    fi


  done

Я не могу понять, почему шестнадцатеричный код выдает ошибку. Пожалуйста помоги .


person Abhishake Yadav    schedule 20.05.2016    source источник
comment
Вы пытались выполнить свой скрипт с помощью bash -x?   -  person antiguru    schedule 20.05.2016
comment
Да, это дает мне ту же ошибку.   -  person Abhishake Yadav    schedule 20.05.2016
comment
Вам не хватает do, не так ли? То есть: for file in /argus/raid2/"$line"/*.ffid и hexdump -e "16 \"%_p\" \"\\n\"" $FFID | sed -n '68,73p' > list1 и done должны быть for file in /argus/raid2/"$line"/*.ffid; do hexdump -e "16 \"%_p\" \"\\n\"" $FFID | sed -n '68,73p' > list1; done (точки с запятой добавлены для использования в комментарии; в скрипте нет необходимости, если do и done находятся на отдельной строке).   -  person Jonathan Leffler    schedule 20.05.2016
comment
Я хочу использовать команду hexdump для каждого файла в каталоге, как он появляется.   -  person Abhishake Yadav    schedule 20.05.2016
comment
Вам нужно научиться отладке сценария оболочки — кратко sh -x yourscript.sh. Кроме того, вам необходимо научиться создавать MCVE (минимально воспроизводимый пример). Отображение точного сообщения об ошибке показало бы номер строки. После этого вам не понадобится много строк, чтобы иметь возможность поддерживать ошибку, удаляя при этом много строк кода. Возможно, вы даже сами заметили проблему.   -  person Jonathan Leffler    schedule 20.05.2016
comment
shellcheck.net — отличный сайт, который показал бы вам многие ваши ошибки. Например, вы не можете присваивать с пробелами вокруг знака =, а параметр слева от знака равенства не должен начинаться с $.   -  person Benjamin W.    schedule 20.05.2016
comment
Спасибо Бенджамин .... Я искал что-то вроде этого   -  person Abhishake Yadav    schedule 20.05.2016


Ответы (1)


Вам не хватает do в цикле for:

for file in /argus/raid2/"$line"/*.ffid
do

hexdump -e "16 \"%_p\" \"\\n\"" $FFID | sed -n '68,73p' > list1 

done 
person Joe    schedule 20.05.2016
comment
Большое спасибо за вашу помощь Джо. - person Abhishake Yadav; 20.05.2016
comment
Я хочу зациклить эту команду шестнадцатеричного дампа для каждого файла в каталоге, а затем выполнить вычисления для вывода из каждого файла. - person Abhishake Yadav; 20.05.2016