我对 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"