用于打开、读取、写入然后保存的 Bash 脚本

用于打开、读取、写入然后保存的 Bash 脚本

我对 Bash 脚本还不熟悉。你能给我举一些编写 Bash 脚本的例子吗?我想写一个脚本,它可以从文件名中读取并将其保存到变量中;增加变量的值并将该变量写回文件并保存。这就是我到目前为止开始并坚持做的事情。

#!/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

答案1

这是经过一些修改的脚本。

#!/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

只要 file1 和 file2 均未发生改变,则重复运行上述脚本时,file3 的内容将始终相同。如果 file1 或 file2 不存在,则会向其中写入“1”作为默认值。

以下是使用函数的脚本的改进版本:

#!/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"

相关内容