Я пытаюсь адаптировать скрипт в backtrack для работы с Ubuntu. Я продолжаю получать сообщение об ошибке в строке 14, которая является строкой « if [$? == 0]; затем »
, скрипт был найден в http: // pctechtips. org / script-to-change-mac-and-hostname-in-backtrack /
код ниже
#!/bin/bash
#author: Jorge L. Vazquez
#purpose: this script will change the mac address to random
#and will pick a random word from password.lst in jtr for hostname
#change variables "interface" and "file" to your settings
#also macchanger needs to be installed
INTERFACE=eth0
FILE=/pentest/passwords/jtr/password.lst
WORD=$(sort -R $FILE | head -1)
#changing mac address to random
ifconfig $INTERFACE down > /dev/null
if [ $? == 0 ]; then
printf "%s\nChanging mac address...\n"
macchanger -r $INTERFACE
else
printf "%sScript encounter an error, sorry...\n"
exit 1
fi
#changing hostname to random word from password.lst
printf "%s\nChanging Hostname...\n"
OLDHOST=$(hostname)
hostname $WORD
if [ $? == 0 ]; then
printf "%sPrevius Hostname: $OLDHOST \n"
printf "%sRandom Hostname: $WORD \n"
else
printf "%sScript encounter an error, sorry...\n"
exit 1
fi
#putting interface up
ifconfig $INTERFACE up > /dev/null
printf "\n"
#END
и файл списка слов для файла хоста (пароль. lst) выглядит так
# A couple of merged /etc/hosts files --
#
4000ex
a-lhi-bbn-01
a-lhi-sri-03
a00
a1
a2
Я запускаю скрипт, используя sh filename.sh, и я дал ему доступ к исполняемому файлу, и Macchanger установлен, но я все еще получаю ошибку
sh не bash, поэтому не запускайте bash-скрипт с sh. Запустите его либо с ./filename
(требует, чтобы скрипт был исполняемым, и использовал шебанг), либо с bash ./filename
(требуется только, чтобы скрипт читался, а шебанг игнорируется).
Также не рекомендуется использовать расширения для сценариев, особенно .sh
, когда сценарий не является сценарием sh.
Сам сценарий использует совместимый с POSIX sh синтаксис, за исключением команды [
, у которой нет оператора ==
в POSIX. Чтобы сравнить две строки на равенство с командой [
, оператором является =
. [ "$?" = 0 ]
.
Тем не менее, проверка, является ли $?
0 или нет, немного бессмысленна. Лучше просто проверить команду напрямую, чем запускать команду, а затем выполнить другую команду, чтобы определить, была ли предыдущая команда выполнена успешно.
if ifconfig "$interface" down > /dev/null; then
...
else
...
fi