#!/bin/bash -f declare obj=$1 declare -i bValid function octal_permissions { permissions=$1 case $permissions in 'r--') octal_value=4; ;; '-w-') octal_value=2; ;; '--x') octal_value=1; ;; 'rw-') octal_value=6; ;; '-wx') octal_value=3; ;; 'r-x') octal_value=5; ;; 'rwx') octal_value=7; ;; '---') octal_value=0; ;; esac } function check_permissions { permissions=$1 bad_perms=1 no_change=0 if [ $permissions == "-" ]; then bad_perms=0 no_change=1 elif (echo $permissions | grep "^[0-7]$"); then obj_perms=`echo $permissions` bad_perms=0 elif (echo $permissions | grep "^[r\-][w\-][x\-]$"); then octal_permissions $permissions obj_perms=`echo $octal_value` bad_perms=0 fi } function human_permissions { total_perms=0 permissions=`echo $1 | sed 's/\-/\A/g'` echo $permissions case $permissions in rAA) human_permissions="Read Only" ;; rwA) human_permissions="Read and Write" ;; rAx) human_permissions="Read and Execute" ;; AwA) human_permissions="Write Only" ;; Awx) human_permissions="Write and Execute" ;; AAx) human_permissions="Execute Only" ;; rwx) human_permissions="Read, Write and Execute" ;; #*) human_permissions="Unknown" ;; esac } function do_chmod { obj=$1 echo "" echo "Valid Permissions are: RWX or an octal value, a dash (-) will leave the permission unchanged." echo "" bValid=0 while [ $bValid -ne 1 ]; do read -p "New User Permissions (currently $user_permissions): " -e perms check_permissions $perms if [ $bad_perms -eq 1 ]; then echo "Invalid Permissions, please use rwx or octal value (0-7)!!" else if [ $no_change -eq 1 ]; then octal_permissions $user_permissions obj_perms = `echo $octal_value` fi new_perms=`echo $obj_perms` bValid=1 fi done bValid=0 while [ $bValid -ne 1 ]; do read -p "New Group Permissions (currently $group_permissions):" -e perms check_permissions $perms if [ $bad_perms -eq 1 ]; then echo "Invalid Permissions, please use rwx or octal value (0-7)!!" else if [ $no_change -eq 1]; then octal_permissions $group_permissions obj_perms = `echo $octal_value` fi new_perms=`echo $obj_perms` bValid=1 fi done bValid=0 while [ $bValid -ne 1 ]; do read -p "New Other Permissions (currently $other_permissions): " -e perms check_permissions $perms if [ $bad_perms -eq 1 ]; then echo "Invalid Permissions, please use rwx or octal value (0-7)!!" else if [ $no_change -eq 1]; then octal_permissions $other_permissions obj_perms = `echo $octal_value` fi new_perms=`echo $obj_perms` bValid=1 fi done chmod -R $new_perms "$obj" echo "New File Data:" ls -ld "$obj" echo "" } function do_lsch { obj=$1 if [ ! -e "$obj" ]; then echo "Specified file or folder could not be found."; exit 1; fi if [ -d "$obj" ]; then obj_type="Directory" else obj_type="File" fi user=`ls -ld "$obj" | cut -d " " -f 3` group=`ls -ld "$obj" | cut -d " " -f 4` permissions=`ls -ld "$obj" | cut -d " " -f 1` user_permissions=`echo $permissions | cut -b 2-4` human_permissions $user_permissions user_hpermissions=$human_permissions group_permissions=`echo $permissions | cut -b 5-7` human_permissions $group_permissions group_hpermissions=$human_permissions other_permissions=`echo $permissions | cut -b 8-10` human_permissions $other_permissions other_hpermissions=$human_permissions modification_date=`ls -ld --time-style="+%B %d, %Y at %l:%M%P" "$obj" | cut -d " " -f 6,7,8,9,10,11` if [ -d "$obj" ]; then size="N/A" else size=`ls -l hello | cut -d " " -f 5` size=`echo $size bytes` fi echo "$obj_type: $obj" echo "User: $user" echo "Group: $group" echo "Size: $size" echo "Permissions: User: $user_hpermissions" echo " Group: $group_hpermissions" echo " Other: $other_hpermissions" echo "Modification Date: $modification_date" bValid=0 while [ $bValid -eq 0 ]; do if [ -d "$obj" ]; then echo "WARNING: If you modify permissions of this folder you modify it for ALL contents!!!" fi read -p "Would you like to modify the permissions of this $obj_type? (Y/N): " -e uResponse if [[ $uResponse == "Y" || $uResponse == "y" ]]; then do_chmod $obj bValid=1 elif [[ $uResponse == "N" || $uResponse == "n" ]]; then bValid=1 else echo "Invalid eentry $uResponse, must by (Y/N)" bValid=0 fi done } counter=0 counter_pointer=1 while [ $counter -lt $# ]; do obj=`eval echo \\$$counter_pointer` do_lsch "$obj" (( counter=counter+1 )) (( counter_pointer=counter_pointer+1 )) done