rendered paste body#!/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