Estoy tratando de ejecutar el script que se encuentra en http://talk.maemo.org/showthread.php?t=70866&page=2 en su hardware previsto, un teléfono Nokia Linux que ejecuta BusyBox ash. La secuencia de comandos recibe el nombre de la red WiFi como parámetro e intenta conectar el teléfono a ella. Sospecho que el script funciona, pero mi SSID, BU (802.1x) , tiene espacio y paréntesis. Entonces, cuando escribo en el símbolo del sistema
autoconnect.sh BU\ \(802.1x\)
Recibo varios errores. Primero,
LIST=`iwconfig wlan0 | awk -F":" '/ESSID/{print $2}'`
if [ $LIST = "\"$1\"" ]; then
... falla, incluso yo estoy conectado a la red. El error no se evita utilizando comillas simples o dobles en lugar de caracteres de escape en el símbolo del sistema.
Segundo,
if [ -z `iwlist wlan0 scan | grep -m 1 -o \"$1\"` ]; then
echo SSID \"$1\" not found;
muestra que grep no encuentra la cadena, aunque el mismo grep, escrito directamente en el símbolo del sistema, encuentra 'BU (802.1x)' .
¿Cómo cotizo $ 1 en las dos circunstancias anteriores para que funcione con mi SSID de red, que contiene espacios y paréntesis?
Gracias.
fuente
No intentes agregar citas literales. Es necesario
if [ "$LIST" = "$1" ]; ...
. Ambas variables deben ser citadas para que el comando de prueba reciba exactamente 3 argumentos, esto es particularmente importante porque los valores contienen espacios.El mismo consejo para el segundo:
if [ -z $(iwlist wlan0 scan | grep -m 1 -o "$1") ]; ...
La mejor manera de escribir lo anterior:
if iwlist wlan0 scan | grep -q "$1"; ...
fuente