2015-10-21 25 views
0

我需要创建一个脚本,它允许传递命令行参数并检查它是否存在于运行脚本的目录中的目录中。如果它列出内容以及是否不打印错误消息。 所以在命令行我应该键入./check.sh测试(现有目录) 和脚本应该运行。现在我不明白如何使用应该是$ 1的测试。在脚本中,我想花1美元,并根据现有目录进行检查。但是如果我这样做:我学习bash,与命令行参数混淆

#!/bin/bash 
DIR=$1 
cd DIR 
ls 

这是行不通的,因为DIR不会在参数取(在这种情况下测试) 我知道我需要使用if-else块,但我不明白如何获得我需要的信息。请有人帮我解决这个问题。

+0

您忘了'$'试试'cd $ DIR' –

+1

您需要使用$ DIR,您可以使用'test(1)'实际测试目录是否存在。就目前来看,如果DIR不存在,你的'ls'将在当前目录中运行。你也可以将它缩短为'cd $ DIR && ls'。 –

+0

其实你不必cd到$ DIR。你可以简单地做'ls $ DIR' –

回答

0

我想你想要的东西,像

#!/bin/bash 
DIR="$1" 
#test if $DIR is a directory. 
if [ -d "$DIR" ]; then 
    cd "$DIR" 
    ls 
fi 

或者,你也可以使用$1整个(它比$ DIR短,我宁愿用env搜索bash - 它并不总是/bin/bash )。

#!/usr/bin/env bash 
if [ -d "$1" ]; then 
    cd "$1" 
    ls 
fi 
+1

来详细阐述@ ElliottFrisch的答案。查看http://tldp.org/LDP/abs/html/fto.html关于文件测试运营商的bash。以及http://tldp.org/LDP/Bash-Beginners-Guide/html/chap_07.html以获得对bash中条件逻辑的理解 – ptierno

+0

非常感谢您的帮助! –

+0

@anon_guy如果“Elliot Frisch”为您提供了您正在寻找的答案,那么也许您应该将他的答案标记为您对您问题的接受答案 – ptierno