Necesito crear un archivo de texto (a menos que ya exista) y escribir una nueva línea en el archivo, todo usando bash.
Estoy seguro de que es simple, pero ¿alguien podría explicarme esto?
Respuestas:
Si desea esto como una secuencia de comandos, la siguiente secuencia de comandos de Bash debe hacer lo que desee (además de indicarle cuando el archivo ya existe):
#!/bin/bash
if [ -e $1 ]; then
echo "File $1 already exists!"
else
echo >> $1
fi
Si no desea el mensaje "ya existe", puede usar:
#!/bin/bash
if [ ! -e $1 ]; then
echo >> $1
fi
Editar sobre el uso:
Guarde la versión con el nombre que desee, digamos "create_file" (cita el mío, no los quiere en el nombre del archivo). Luego, para hacer que el archivo sea ejecutable, en un símbolo del sistema, haga lo siguiente:
chmod u+x create_file
Coloque el archivo en un directorio en su ruta , luego úselo con:
create_file NAME_OF_NEW_FILE
$ 1 es una variable de shell especial que toma el primer argumento en la línea de comando después del nombre del programa; es decir, $ 1 recogerá NAME_OF_NEW_FILE en el ejemplo de uso anterior.
La creación de un archivo de texto en Unix se puede realizar a través de un editor de texto (vim, emacs, gedit, etc.). Pero lo que quieres puede ser algo como esto
echo "insert text here" > myfile.txt
Eso pondrá el texto 'insertar texto aquí' en un archivo myfile.txt. Para verificar que esto funcionó, use el comando 'gato'.
cat myfile.txt
Si desea agregar a un archivo, use este
echo "append this text" >> myfile.txt
Suponiendo que te refieres a los comandos de shell de UNIX, simplemente ejecuta
echo >> file.txt
echoimprime una nueva línea, y >>le dice al shell que agregue esa nueva línea al archivo, creando si aún no existe.
Sin embargo, para responder correctamente a la pregunta, necesito saber qué le gustaría que sucediera si el archivo ya existe. Si quisiera reemplazar su contenido actual con la nueva línea, por ejemplo, usaría
echo > file.txt
EDITAR: y en respuesta al comentario de Justin, si desea agregar la nueva línea solo si el archivo aún no existía, puede hacerlo
test -e file.txt || echo > file.txt
Al menos eso funciona en Bash, no estoy seguro de si también funciona en otros shells.
#!/bin/bash
file_location=/home/test/$1.json
if [ -e $policy ]; then
echo "File $1.json already exists!"
else
cat > $file_location <<EOF
{
"contact": {
"name": "xyz",
"phonenumber": "xxx-xxx-xxxx"
}
}
EOF
fi
Este código verifica si el archivo JSON dado del usuario está presente en el directorio de inicio de prueba o no. Si no está presente, lo creará con el contenido. Puede modificar la ubicación y el contenido del archivo según sus necesidades.