Script Bash para abrir, ler e escrever e depois salvar

1

Eu sou novo nessa coisa de script. Você pode me mostrar um exemplo sobre como escrever um script Bash? Eu quero escrever um script que possa ler de um nome de arquivo e salvá-lo em uma variável; incremente o valor da variável e escreva aquela variável de volta no arquivo e salve-a. Isso é o que eu comecei e prendi até agora.

#!/bin/bash
# if file exist

#echo "Testing \ "$1""
if [ -f "$1" ]; then
 echo "$1 does exist"
else
 echo "$1 does not exist!" 
 echo "Creating $1"
 touch $1

 echo "This is test" > $1
 exit 1
fi

#echo "Testing \ "$2""
if [ "$2" == "" ]; then
 echo "Enter the filename"
elif [ -f "$2" ]; then
 echo "$2 Fille does exist" 
else
 echo "$2 File doesn't exist"
 echo "Creating $2"
 touch $2
exit 1
fi

counter=1
echo -n "Enter a file name : "
read file

if  [ ! -f $file ]
then
    echo "$file not a file!"
    exit 1
fi
    
por Alex Vo 12.01.2011 / 18:03

1 resposta

1

Aqui está o seu script com algumas modificações.

#!/bin/bash
# if file exist

#echo "Testing \ "$1""
if [ "$1" == "" ]
then
    read -r -p "Enter the filename" file1
else
    file1=$1
fi

if [ -f "$file1" ]
then
    echo "$file1 does exist"
else
     echo "$file1 does not exist!" 
     echo "Creating $file1"
     echo "1" > "$file1"
     exit 1
fi

#echo "Testing \ "$2""
if [ "$2" == "" ]
then
    read -r -p "Enter the filename" file2
else
    file1=$2
fi

if [ -f "$file2" ]
then
    echo "$file2 does exist"
else
     echo "$file2 does not exist!" 
     echo "Creating $file2"
     echo "1" > "$file2"
     exit 1
fi

if [ "$3" == "" ]
then
    read -r -p "Enter the filename" file3
else
    file3=$3
fi

# the following assumes that the data from the file is an integer
# and that it consists of only one line containing one value
# similar techniques can be used to do something much more powerful
data1=$(<"$file1")
data2=$(<"$file2")
# it's usually a good idea to validate data, but I have not included any validation
((data3 = data1 + data2))
echo "$data3" > "$file3"    # overwrite the previous contents of the file with the new value

Contanto que nenhum arquivo1 ou arquivo2 mude, o conteúdo do arquivo3 será sempre o mesmo em repetidas execuções do script acima. Se file1 ou file2 não existir, um "1" será gravado como um valor padrão.

Aqui está uma versão melhorada do script usando funções:

#!/bin/bash
checkarg () {
    local filename=$1
    if [ "$filename" == "" ]
    then
        read -r -p "Enter the filename" filename
    fi
    echo "$filename"
}

checkfile () {
    local filename=$1
    if [ -f "$filename" ]; then
        echo "$filename does exist"
    else
         echo "$filename does not exist!" 
         echo "Creating $filename"
         echo "1" > "$filename"
         # you could remove this exit if you want the script to continue
         # with newly created files instead of exiting
         exit 1
    fi
}

file1=$(checkarg "$1")
checkfile "$file1"

file2=$(checkarg "$2")
checkfile "$file2"

file3=$(checkarg "$3")

data1=$(< "$file1")
data2=$(< "$file2")
((data3 = data1 + data2))
echo "$data3" > "$file3"
    
por 13.01.2011 / 04:47

Tags