以列和行输出bash shell脚本的结果

时间:2017-07-25 00:51:10

标签: bash shell unix

我正在做一项家庭作业,它检查目录中所有文件的用户权限。我想在一列中输出所有文件名,在一列或多列中输出权限。任何帮助,将不胜感激。

#!/bin/bash
clear
bold=$(tput bold)
normal=$(tput sgr0)
red=`tput setaf 1`
reset=`tput sgr0`
DIR1=$1
cd $1
num=0
for file in *; do
echo ${bold}$file${normal}
if [ -r $file ] 
   then    
      echo ${red}"r"${reset} ;
fi    
if [ -w $file ]
   then       
      echo ${red}"w"${reset};
fi    
if [ -x $file ]
   then       
     echo ${red}"x"${reset};
fi
# ls -l $file | awk '{print $1 }
#ls -1 $file | awk '{print $1 }
(( num+=1 ))
# echo $num
done

echo
echo

if  [ $1 ]
then
echo $num files in specified directory '('`pwd`')'
else
echo $num files in directory '('`pwd`')'
echo

fi
echo
echo

1 个答案:

答案 0 :(得分:0)

  

我想在一列中输出所有文件名,在一列或多列中输出权限。

这样的事可能会这样做:

stat -c "%A %n" *

如果您首先选择文件名,请更改stat的输出:

stat -c "%n %A" *

如果您希望将输出作为表格,则可以使用column命令:

stat -c "%n:%A" * | column -t -s ':'

但如果您的路径中有:,那么这不是一个好的解决方案,您可以为其他任何角色进行更改。

当然,您可以在循环中使用相同的逻辑:

#!/bin/bash               

red=$(tput setaf 1)       
bold=$(tput bold)         
reset=$(tput sgr0)        

for file in "${1:-"${PWD}"}"/*; do                                                                       

    perm=$(stat -c %A "${file}")                  
    echo "${bold}${file}${reset}:${red}${perm:1:3}${reset}"                                              

done | column -t -s ":"