Windows 환경에서 Bash 스크립트 실습

Windows 환경에서 Bash 스크립트 실습

저는 이런 운동을 해요

스크립트를 작성하세요.

  • 파일 만들기 File.txt numer.txt
    • 첫 번째에는 줄 바꿈으로 구분된 스크립트 인수 목록이 포함되어 있습니다.
    • 두 번째에는 UID가 포함되어 있으며, 그 중 하나 이상이 이미 존재하는 경우 오류 메시지를 표시하고 종료합니다.
  • 집에 하위 디렉토리를 만들고 C:\WINDOWS위의 두 파일을 여기에 복사하세요.
  • C:\WINDOWS사용자 소유자와 그룹 소유자만 파일을 수정할 수 있고 다른 소유자는 읽을 수만 있도록 파일의 파일 권한을 설정합니다 .
  • /bin에 대한 심볼릭 링크를 만듭니다 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

관련 정보