2015-02-06 3 views
1

하나의 디렉토리를 다른 디렉토리로 이동하기 위해이 코드를 작성했습니다. 이 코드로 원하는 것은 다음과 같습니다 :쉘 스크립트에서 변수에 기본값을 전달하는 방법은 무엇입니까?

  1. 사용자는 파일 이름이나 디렉토리 이름을 부여합니다.
  2. 사용자가 대상 폴더를 제공 할 수 있습니다. 사용자가 대상 폴더를 원하지 않으면 enter 키를 누릅니다.
  3. 은 다음 소스 디렉토리 (주어진 경우) 대상 디렉토리 또는 기본 디렉토리 (대상이 지정되지 않은 경우)

이 여기에 코드 복사됩니다.

/usr/local/myfiles/copyDirToHTML.sh: line 6: [: : unary operator expected 
/usr/local/myfiles/copyDirToHTML.sh: line 10: =: command not found 
cp: cannot stat ‘’: No such file or directory 
+0

무엇이 문제입니까? – Prashant

+1

대화식 입력을 요구하는 스크립트는 빌딩 블록처럼 더 큰 스크립트에 통합 될 수 없기 때문에 덜 유용합니다. 탭 확장 등과 같이 쉘의 유용한 대화 형 기능을 무시할 수 있습니다. 'cpd'(기본값으로 복사)는 'cpd() {cp "$ 1" "$ {2/path/to/default}"로 간단하게; "; }' – tripleee

+0

감사합니다. 방금 배웁니다. 당신의 해결책을 시도 할 것입니다. @treepleee – InsomniacSabbir

답변

1

변경에게 문제

if [ "$destination_folder" = ""] 
,369를 해결하려면 : 그것은 다음과 같은 오류를 제공

Myfiles.sh (called the shell script in terminal) 
Max Sum (This is the source directory) 
(Pressed enter i.e. No destination given) 

: 여기

$source_folder 
$destination_folder 
$destination 
read -r directory_source 
read -r destination_folder 
if [ "$destination_folder" = ""] 
then 
    $destination = "/var/www/html/" 
else 
    $destination = "$destination_folder" 
fi 
cp -a "$source_folder" "$destination" 

이 프로그램에 입력

read -r directory_source

read -r source_folder 

if [ "$destination_folder" = "" ] 

변경

에 또한 당신은 아래 스크립트를 사용할 수 있습니다. cmd 행에서 인수 전달

#!/bin/sh 
source_folder=$1 

if [ $# -eq 2 ]; then 
    destination=$2 
else 
    destination="/var/www/html/" 
fi 

cp -a "$source_folder" "$destination" 

여기서 $#은 스크립트에 대한 인수의 수입니다.
$ 1 -

./script.sh source_folder [destination] 

대상을 실행하려면> 첫 번째 인수 ... 마찬가지로 $ 2 .. 나는이 문제에 대한 해결책을 가지고

+0

나는 첫 번째 지시를 따랐다. if 문에 "]"앞에 공백을 추가했습니다. 하지만 목적지에 아무 것도주지 않으면 다음과 같은 오류가 발생합니다. "/usr/local/myfiles/copyDirToHTML.sh : 줄 8 : = : 명령을 찾을 수 없습니다. cp : '': 해당 파일이나 디렉토리를 통계 할 수 없습니다. – InsomniacSabbir

+1

변경 완료. 편집 확인 –

+0

고맙습니다. 나는 또한 내 코드에 문제가있다. 그리고 아래에 추가했습니다. – InsomniacSabbir

0

선택 사항입니다. 작동 코드는 다음과 같습니다.

$source_folder 
$destination_folder 
read -r source_folder 
read -r destination_folder 
if [ "$destination_folder" = "" ]; then 
    sudo cp -a "$source_folder" "/var/www/html/" 
else 
    sudo cp -a "$source_folder" "$destination_folder" 
fi 
+0

스크립트 초기에 빈 변수 보간은 불필요 할뿐만 아니라, 이러한 변수가 스크립트가 시작될 때 설정 될 수 있다면 구문 오류가 될 수 있습니다. – tripleee

관련 문제