Я попробовал следующие команды
cut -c-11 ifshell.sh
cat ifshell.sh | cut -c-11 ifshell.sh
cat ifshell.sh | awk '{print $1} | cut -c-11 ifshell.sh
Но каждый раз я получаю полное содержимое файла .sh. Эти команды отлично работают с файлами .txt. Основная цель — извлечь первые 11 символов скрипта "#!/bin/bash", чтобы проверить, действительно ли файл является скриптом bash bin.
решение1
Вы также можете использовать стандартную file
команду ̀:
[PRD][]user@localhost:~ 17:21:30
$ head -n 1 setproxymkt.sh
#!/bin/bash
[PRD][]user@localhost:~ 17:21:38
$ file setproxymkt.sh
setproxymkt.sh: Bourne-Again shell script, ASCII text executable
решение2
Возможно, следующее лучше подойдет для достижения вашей цели:
# #// FILE could be a for-loop as well for example.
FILE="bash_scropt.sh" ;
if grep '#!/bin/bash' $FILE 1>/dev/null ; then
printf "$FILE bash-script\n" ;
else
printf "> $FILE -- NOT bash\n" ;
fi ;
Вы также можете объединить это с предложением @netmonk, где grep по заголовку будет более лаконичным, например:
FILE="bash_scropt.sh" ; if head -n 1 $FILE | grep '#!/bin/bash' 1>/dev/null ; then printf "$FILE bash-script\n" ; else printf "> $FILE -- NOT bash\n" ; fi