LINUX.ORG.RU

Помогите со скриптом

 ,


0

2

Написал скрипт для включения/отключения сетевого интерфейса. Запускаю под xUbuntu все работает. А если запускаю под openWRT, то ругается и пишет что переменная daynow не найдена, но при этом ошибку видит в последней строке, где я закрываю первое условие. Я так понимаю ошибка в синтаксисе, т.к. openWRT использует dash? Скрипт с примером под openWRT начинается со строки «#!/bin/sh»

#!/bin/bash
daynow=$(date +%u)
timenow=$(date +%k)
if((daynow>=1&&daynow<=7));then
	if((daynow==5&&timenow>=18||daynow==7&&timenow<=18||daynow==6));then
		ifconfig eth0 down
		echo Interfece eth0 Down
	else
		ifconfig eth0 up
		echo Interfece eth0 Up
	fi
fi

Ответ на: комментарий от shvedoffsky

Конечный код

#!/bin/sh
daynow=$(date +%u)
timenow=$(date +%k)
if [$daynow -ge 1] && [$daynow -le 7];then
	if [$daynow -eq 5] && [$timenow -ge 18] || [$daynow -eq 7] && [$timenow -le 18] || [$daynow -eq 6];then
		ifconfig pptp-Tun down
		echo Interfece pptp-Tun Down
	else
		ifconfig pptp-Tun up
		echo Interfece pptp-Tun Up
	fi
fi

shvedoffsky
() автор топика
Ответ на: комментарий от shvedoffsky

Я ошибся, к сожалению код не работает. Подставляя значения в переменные «daynow» и «timenow», «echo» - молчит. Причем этот же код работает на xUbuntu без проблем.

#!/bin/sh
#daynow=$(date +%u)
#timenow=$(date +%k)
daynow=6
timenow=14
if [ $daynow -ge 1 ] && [ $daynow -le 7 ] ; then
	if [ $daynow -eq 5 ] && [ $timenow -ge 18 ] || [ $daynow -eq 7 ] && [ $timenow -le 18 ] || [ $daynow -eq 6 ] ; then
		#ifconfig pptp-Tun down
		echo "pptp-Tun Down"
	else
		#ifconfig pptp-Tun up
		echo "pptp-Tun Up"
	fi
fi

shvedoffsky
() автор топика
Ответ на: комментарий от futurama

фу таким быть

украи^Wанархист что ли?

anonymous
()
Ответ на: комментарий от futurama

Понятное дело что нет.Но, пытаюсь разобраться что к чему, и в какую сторону копать.

shvedoffsky
() автор топика
Ответ на: комментарий от shvedoffsky

Всем спасибо, проблема решена вычленением одного условия.

shvedoffsky
() автор топика
Ответ на: комментарий от shvedoffsky

Не

if [ $daynow -eq 5 ] && [ $timenow -ge 18 ] || [ $daynow -eq 7 ] && [ $timenow -le 18 ] || [ $daynow -eq 6 ] ;

а

if [ $daynow -eq 5 -a $timenow -ge 18 -o $daynow -eq 7 -a $timenow -le 18 -o $daynow -eq 6 ] ;

aureliano15 ★★
()
Ответ на: комментарий от anonymous

Не знаю. Вот скрипт (собственно, я ничего в нём не менял, кроме того, о чём говорил раньше и явного вызова оболочки ash, которую специально поставил):

#!/bin/ash
#daynow=$(date +%u)
#timenow=$(date +%k)
daynow=6
timenow=14
if [ $daynow -ge 1 -a $daynow -le 7 ] ; then
	if [ $daynow -eq 5 -a $timenow -ge 18 -o $daynow -eq 7 -a $timenow -le 18 -o $daynow -eq 6 ] ; then
		#ifconfig pptp-Tun down
		echo "pptp-Tun Down"
	else
		#ifconfig pptp-Tun up
		echo "pptp-Tun Up"
	fi
fi

Ну и с bash и dash то же самое попробовал. Результат всегда один:

./testif.sh
pptp-Tun Down

Правда сейчас посмотрел, ls -l /bin/ash у меня выводит:

lrwxrwxrwx 1 root root 4 янв  8  2014 /bin/ash -> dash

(ОС Debian).

Или у тебя какая-то совсем уж урезанная ash, и надо поставить dash или bash и вызывать их, или ты всё-таки где-то ошибся.

aureliano15 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.