Windows环境下Bash脚本练习

Windows环境下Bash脚本练习

我有这个练习

编写一个脚本,其中

  • 创建文件 File.txt numer.txt
    • 第一个包含脚本参数列表,以换行符分隔,
    • 第二个包含您的 UID,如果其中至少一个已存在,则显示错误消息并退出;
  • 在您的家中创建子目录C:\WINDOWS并将上述两个文件复制到其中;
  • 设置文件的文件权限,C:\WINDOWS只有用户所有者和组所有者可以修改文件,其他人只能读取;
  • /bin创建到in 的符号链接C:\WINDOWS
  • 创建包含您家中所有文件列表的SYSTEM32文件;C:\WINDOWS

和这段代码

#!/bin/bash

touch File.txt
touch numer.txt
for i in $@
do 
    echo $i >> File.txt
done
id -u >> numer.txt
if $(test -e numer.txt)
then 
    echo Error message
    exit
fi
mkdir C:\WINDOWS
cp File.txt C:\WINDOWS
cp numer.txt C:\WINDOWS
ln -s C:\WINDOWS bin/link
ls $HOME > SYSTEM32

有人可以帮忙解决这个问题吗?我不知道我是否正确解决了它,当我运行它时,它总是打印“错误消息”。

答案1

有不少错误,请原谅我为您做的。我评论了这些变化:

#!/bin/bash

# check if files exist and exit 
if [ -f File.txt -o -f numer.txt ] ; then
    echo "Files exist" >&2
    exit 1
fi
## You need this incase there are no arguments
touch File.txt
# but you don't need this
# touch numer.txt

# Always use "$@" not $@, use "$i" not $i
for i in "$@"
do 
    echo "$i" >> File.txt
done
## Really this should be > not >> (you are not appending to an existing)
id -u > numer.txt
# If you test for the file existing after you create it, it will always exist!
#if $(test -e numer.txt)
#then 
#    echo Error message
#    exit
#fi
# \ is the control character to write a single \ use \\
mkdir C:\\WINDOWS
cp File.txt C:\\WINDOWS
cp numer.txt C:\\WINDOWS
# The link should be in C:\WINDOWS and point to bin
ln -s bin C:\\WINDOWS
# one file per line (-1).  And generally use ~ for your home
ls -1 ~ > C:\\WINDOWS/SYSTEM32

相关内容