Запретить cronjob писать в /var/mail/$USER?

Para abordar la pregunta específica:

Do I need to convert the string to an int some how?

La respuesta es no. Las variables de shell son todas cadenas, pero según el contexto en el que se utilicen, pueden tratarse como enteros o cadenas. En el caso del operador -lepara el comando [(, también conocido como comando test), las variables se tratarán como números enteros.

# integer comparison
$ var=25; test "$var" -le "$HOME"
bash: test: /home/username: integer expression expected
$ test "$var" -le 30 && echo Lower
Lower
# string comparison
$ test $var = 24 && echo 'same string' || echo 'different string'
different string
$ test $var = 25 && echo 'same string' || echo 'different string'
same string

Su secuencia de comandos debe inicializar la variable counter, eliminar $de numOfBytesen ready eliminar $de let.

#!/bin/bash

read -p "How many bytes would you like you replace :> " numOfBytes
echo "$numOfBytes bytes to replace"
counter=0
while [ "$counter" -le "$numOfBytes" ]
do
    echo "testing counter value = $counter"
    let counter++
done

Esto funciona así:

$./counter.sh 
How many bytes would you like you replace :> 5
5 bytes to replace
testing counter value = 0
testing counter value = 1
testing counter value = 2
testing counter value = 3
testing counter value = 4
testing counter value = 5

Tenga en cuenta que debido a que letes una palabra clave bash/ ksh, esto hace que el script sea menos portátil. Sería recomendable hacer uso de la expansión aritmética counter=$((counter+1)), que es parte del estándar Shell Language de POSIX(sección 2.6.4 ).

Véase también:https://askubuntu.com/a/939299/295286


Como señaló Storm Dragon , el hecho de que las variables de shell se traten según su contexto también implica que la entrada del usuario debe limpiarse. Una forma posible es tomar numOfBytesen estado portátil casecomo en esta respuesta , que se encarga de determinar si la entrada es realmente un dígito.

0
11.06.2019, 14:08
0 ответов

Теги

Похожие вопросы