0

我在存储当前路径并将其与输入的用户进行比较时遇到问题。目前我有

cd $path
checkpath="$(pwd)"
if [ "$checkpath" == "$path" ]; then
chown -Rv $user *

并且 $path 由用户输入。脚本每次都在上述点失败,我不知道为什么。我只需要一种方法来检查 chown 部分是否真的会在用户输入的路径下执行。

编辑:$path 包含用户输入的路径,而 checkpath 应包含 pwd 生成的输出。所以简而言之,是的,我试图确保 cd 命令有效,并且 chown 将在他被要求时使用 write 的目录中执行。

4

2 回答 2

1
cd "$path" && chown -Rv "$user" *

这仅chowncd命令成功时执行。写同一件事的其他方式:

if cd "$path"; then
    chown -Rv "$user" *
fi

或者

cd "$path" || exit
chown -Rv "$user" *

或者

#!/bin/bash -e
cd "$path"
chown -Rv "$user" *

最后一个设置 shell 的-e标志,如果任何命令失败,它会立即退出而不是继续。

于 2015-09-08T17:01:34.010 回答
0

您提供的 $path 必须是完整路径,然后才会成功,而且您需要在 end 中添加“fi”。它看起来像:

./script.sh  /path_to_be_given user

cat script.sh

#!/bin/bash
path=$1
user=$2
cd $path
checkpath="$(pwd)"
echo "Parameter passed : path => $path ; user => $user ; checkpath =>    $checkpath "
if [ "$checkpath" == "$path" ]; then
    echo "chown -Rv $user *"
    chown -Rv $user *
    if [ $? -eq 0 ]; then
        echo "Ownership changed"
    fi 
fi

希望这能解决你的问题

于 2015-09-08T19:35:57.153 回答