【问题标题】:Change read and write permission of file更改文件的读写权限
【发布时间】:2019-11-17 01:44:11
【问题描述】:

我正在尝试更改作为命令行参数给出的文件的文件权限。请帮帮我

整个问题陈述如下:

编写一个shell脚本,将文件的读写权限更改为对所有文件的读、写和执行权限。

如果文件存在显示为,

“文件存在!”

否则显示为,

“文件不存在”

如果文件有读写权限显示为,

“文件权限已更改”

假设文件名作为命令行参数给出。

下面是我试过的代码。

f="$1"
if [ -e $f ]
then echo "File Exists!"

elif [ ! -e $f ]
then 
echo "File does not Exist" && exit
fi

if [ -w $f ] && [ -r $f ]
then 
chmod o-rw $f && echo "File Permission has been changed"
fi

预期输出:

样本输出1:

文件存在! 文件权限已更改

样本输出2:

文件不存在

实际结果:

失败的测试用例 2

文件权限未设置

【问题讨论】:

  • 如何运行你的脚本?对 $1 文件显示 ls -l。也不需要额外检查 elif -e
  • 您想为所有用户设置权限还是只为您设置权限?你也可以分享 ls -l $file 输出的输出。 chmod u+w 只授予所有者写入权限,它不授予您写入文件的权限。所以运行chmod u+w后,文件还是不能被你写,
  • 同样在最后一个 if 语句中,您只检查写入,而不检查写入和读取
  • 您说对于第二个测试用例的预期输出,它应该声明该文件不存在。但是,你又说他们失败的测试用例没有设置权限。如果测试用例 2 的文件不应该存在,您正在检查哪个文件以查看权限是否更改?如果您可以向我们提供您的工作目录的ls -la 以及您用于测试用例的实际命令,将会有所帮助。

标签: shell unix file-permissions


【解决方案1】:
for input in ${*}
do
        checkfile=`test -f ${input}`
        OUT=$?
        if [ $OUT -eq 0 ]
        then
                echo File Exists!
                permission1=`ls -l ${input} | cut -c 2-4 | grep rw`
                OUT=$?
                if [ $OUT -eq 0 ]
                then
                        `chmod 777 ${input}`
                        echo File Permission has been changed
                fi

        else
                echo File does not Exist
        fi
done

【讨论】:

    【解决方案2】:

    #!/bin/bash

    echo "输入文件名"

    读f

    $f 中的 f

    如果 [ -e $f ]

    然后

    echo "文件存在...!!!"

    如果 [ -w $f ] && [ -r $f ]; 那么

    chmod 777  $f && echo "File Permission has been changed"
    

    fi 否则

    echo "File Does not Exist"
    
    echo "Do you want to Re-enter the File Name Press Y or y "
    read a;
    

    如果 [ "$a" != "${a#[Yy]}" ];

    然后

       continue
    
    else
       exit
    

    fi 菲 完成

    【讨论】:

      【解决方案3】:
      #!/bin/bash
      f="$1"
      
      for f in ${*}; do
        if [ -e $f ]; then
          echo "File Exists!"
      
          if [ -w $f ] && [ -r $f ]; then
            chmod a=rwx $f && echo "File Permission has been changed"
          fi
        else
          echo "File does not Exist" && exit
        fi
      done
      

      【讨论】:

      • 欢迎来到 Stackoverflow,感谢您对这个问题的回答。如果您想提供高质量的答案,您可以更新您的代码并解释您所做的更改。这将有助于其他人更好地理解它。
      【解决方案4】:

      试试这个...它会工作,

      for f in ${*}
      do
      if [ -e $f ]; then
          echo "File Exists!"
          if [ -w $f ] && [ -r $f ]; then
              chmod a=rwx $f && echo "File Permission has been changed"
          fi
      else
          echo "File does not Exist" && exit
      fi
      done
      

      【讨论】:

        【解决方案5】:
        1. f="$1"
        2. 如果 [ -e $f ] 则回显“文件存在!”
        3. elif [ ! -e $f ] 然后回显“文件不存在” && 退出
        4. fi
        5. 如果 [-w $f ] && [ -r $f ] 然后 chmod 777 $f && echo "文件权限 已更改”
        6. fi

        只需更改 --> chmod 777

        【讨论】:

          猜你喜欢
          • 2011-06-05
          • 2014-03-02
          • 1970-01-01
          • 2012-08-08
          • 2017-01-29
          • 2021-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多