flipje

chmod-calc

Jul 5th, 2011
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.65 KB | None | 0 0
  1. #!/bin/bash
  2. # +-----------------------------------------------------------------------------------------+
  3. # | A simple chmod calculator for lazy engineers                                            |
  4. # | July 2011 flip hess [email protected]                                                 |
  5. # +-----------------------------------------------------------------------------------------+
  6.  
  7.   # Global variables:
  8.  
  9.   PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  10.   SCRIPT_PATH="${0}"
  11.  
  12.   # Functions:
  13.  
  14.   # exit function
  15.   function die()
  16.   {
  17.     echo "${1}"
  18.     exit "${2}"
  19.   }
  20.  
  21.   ################################################################
  22.   # The ask function.
  23.   ################################################################
  24.   function fAsk()
  25.   {
  26.     local SECTION="${1}"
  27.     local ANSWER=""
  28.     local COUNT='1'
  29.     local MAXCOUNT='2'
  30.  
  31.     echo "#############################################"
  32.     echo "Calculating permissions for ${SECTION}"
  33.     echo "#############################################"
  34.  
  35.     # --------------------- READ PERMISSIONS --------------------- #
  36.  
  37.     # while loop for answer:
  38.     local READ='unknown'
  39.  
  40.     while [ ${READ} = 'unknown' ]
  41.     do
  42.       # exit if max count is reached:
  43.       if [ ${COUNT} -gt ${MAXCOUNT} ]
  44.       then
  45.         die "Too many non-related answers or enters... Exiting script!" "1"
  46.       fi
  47.  
  48.       # ask for answer
  49.       echo "Dou you want READ permissions for ${SECTION}?"
  50.       echo "Please type Yes or No [Y/N]"
  51.       read ANSWER
  52.    
  53.       # startover if no answer
  54.       if [ -z ${ANSWER} ]
  55.       then
  56.         COUNT="$(echo $(( ${COUNT} +1)))"
  57.         continue
  58.       fi
  59.  
  60.       # define yes or no
  61.       if [ ${ANSWER} = YES ] || [ ${ANSWER} = yes ] || [ ${ANSWER} = Y ] || [ ${ANSWER} = y ] || [ ${ANSWER} = Yes ]
  62.       then
  63.         READ='1'
  64.       elif [ ${ANSWER} = 'NO' ] || [ ${ANSWER} = 'no' ] || [ ${ANSWER} = 'N' ] || [ ${ANSWER} = 'n' ] || [ ${ANSWER} = 'No' ]
  65.       then
  66.         READ='0'
  67.       else
  68.         # error message and start over
  69.         echo "Answer not taken, please retry or type CTRL+C for exit"
  70.         COUNT="$(echo $(( ${COUNT} +1)))"
  71.         continue
  72.       fi
  73.     done
  74.  
  75.     # --------------------- WRITE PERMISSIONS -------------------- #
  76.  
  77.  
  78.     # Write permissions
  79.     local WRITE='unknown'
  80.  
  81.     while [ ${WRITE} = 'unknown' ]
  82.     do
  83.       # exit if max count is reached:
  84.       if [ ${COUNT} -gt ${MAXCOUNT} ]
  85.       then
  86.         die "Too many non-related answers... Exiting script!" "1"
  87.       fi
  88.  
  89.       # ask for answer
  90.       echo "Dou you want WRITE permissions for ${SECTION}?"
  91.       echo "Please type Yes or No [Y/N]"
  92.       read ANSWER
  93.  
  94.       # startover if no answer
  95.       if [ -z ${ANSWER} ]
  96.       then
  97.         COUNT="$(echo $(( ${COUNT} +1)))"
  98.         continue
  99.       fi
  100.    
  101.       # define yes or no
  102.       if [ ${ANSWER} = 'YES' ] || [ ${ANSWER} = 'yes' ] || [ ${ANSWER} = 'Y' ] || [ ${ANSWER} = 'y' ] || [ ${ANSWER} = 'Yes' ]
  103.       then
  104.         WRITE='1'
  105.       elif [ ${ANSWER} = 'NO' ] || [ ${ANSWER} = 'no' ] || [ ${ANSWER} = 'N' ] || [ ${ANSWER} = 'n' ] || [ ${ANSWER} = 'No' ]
  106.       then
  107.         WRITE='0'
  108.       else
  109.         echo "Answer not taken, please retry or type CTRL+C for exit"
  110.         COUNT="$(echo $(( ${COUNT} +1)))"
  111.         continue
  112.       fi
  113.     done
  114.  
  115.     # --------------------- EXECUTE PERMISSIONS ------------------ #
  116.  
  117.     # EXECUTE permissions
  118.     local EXECUTE='unknown'
  119.  
  120.     while [ ${EXECUTE} = 'unknown' ]
  121.     do
  122.       # exit if max count is reached:
  123.       if [ ${COUNT} -gt ${MAXCOUNT} ]
  124.       then
  125.         die "Too many non-related answers... Exiting script!" "1"
  126.       fi
  127.  
  128.       # ask for answer
  129.       echo "Dou you want EXECUTE permissions for ${SECTION}?"
  130.       echo "Please type Yes or No [Y/N]"
  131.       read ANSWER
  132.    
  133.       # startover if no answer
  134.       if [ -z ${ANSWER} ]
  135.       then
  136.         COUNT="$(echo $(( ${COUNT} +1)))"
  137.         continue
  138.       fi
  139.  
  140.       # if answer:
  141.       if [ ${ANSWER} = 'YES' ] || [ ${ANSWER} = 'yes' ] || [ ${ANSWER} = 'Y' ] || [ ${ANSWER} = 'y' ] || [ ${ANSWER} = 'Yes' ]
  142.       then
  143.         EXECUTE='1'
  144.       elif [ ${ANSWER} = 'NO' ] || [ ${ANSWER} = 'no' ] || [ ${ANSWER} = 'N' ] || [ ${ANSWER} = 'n' ] || [ ${ANSWER} = 'No' ]
  145.       then
  146.         EXECUTE='0'
  147.       else
  148.         echo "Answer not taken, please retry or type CTRL+C for exit"
  149.         COUNT="$(echo $(( ${COUNT} +1)))"
  150.         continue
  151.       fi
  152.     done
  153.  
  154.     # --------------------- PROCESS RESULTS FOR ------------------ #
  155.  
  156.     # Make results:
  157.     if   [ ${READ} = 0 ] && [ ${WRITE} = 0 ] && [ ${EXECUTE} = 0 ]
  158.     then
  159.       RESULT='0'
  160.     elif [ ${READ} = 0 ] && [ ${WRITE} = 0 ] && [ ${EXECUTE} = 1 ]
  161.     then
  162.       RESULT='1'
  163.     elif [ ${READ} = 0 ] && [ ${WRITE} = 1 ] && [ ${EXECUTE} = 0 ]
  164.     then
  165.       RESULT='2'
  166.     elif [ ${READ} = 0 ] && [ ${WRITE} = 1 ] && [ ${EXECUTE} = 1 ]
  167.     then
  168.       RESULT='3'
  169.     elif [ ${READ} = 1 ] && [ ${WRITE} = 0 ] && [ ${EXECUTE} = 0 ]
  170.     then
  171.       RESULT='4'
  172.     elif [ ${READ} = 1 ] && [ ${WRITE} = 0 ] && [ ${EXECUTE} = 1 ]
  173.     then
  174.       RESULT='5'
  175.     elif [ ${READ} = 1 ] && [ ${WRITE} = 1 ] && [ ${EXECUTE} = 0 ]
  176.     then
  177.       RESULT='6'
  178.     elif [ ${READ} = 1 ] && [ ${WRITE} = 1 ] && [ ${EXECUTE} = 1 ]
  179.     then
  180.       RESULT='7'
  181.     else
  182.       die "Something went wrong processing results, exiting ${SCRIPT_PATH}!" "1"
  183.     fi
  184.  
  185.     # --------------------- EXPORT VARIABLES    ------------------ #
  186.  
  187.     # export var
  188.     if [ ${SECTION} = OWNER ]
  189.     then
  190.       export OWNER="${RESULT}"
  191.     elif [ ${SECTION} = GROUP ]
  192.     then
  193.       export GROUP="${RESULT}"
  194.     elif [ ${SECTION} = OTHER ]  
  195.     then
  196.       export OTHER="${RESULT}"
  197.     else
  198.       die "Wronk results!" "1"
  199.     fi
  200.  
  201.     # clear screen
  202.     clear
  203.  
  204.     return 0
  205.  
  206.   }
  207.  
  208.   ################################################################
  209.   # processes results
  210.   ################################################################
  211.   function fResult()
  212.   {
  213.     for SECTION in OWNER GROUP OTHER
  214.     do
  215.       # run function with name
  216.       fAsk "${SECTION}"
  217.     done
  218.  
  219.     echo "###############################"
  220.     echo
  221.     echo "File permissions are: ${OWNER}${GROUP}${OTHER} "
  222.     echo
  223.     echo "###############################"
  224.    
  225.     return 0
  226.  
  227.   }
  228.  
  229.  
  230.   ################################################################
  231.   # Shows usage.
  232.   ################################################################
  233.   function fShowUsage()
  234.   {
  235.     echo "Usage: ${SCRIPT_PATH}"
  236.     return 0
  237.   }
  238.  
  239.   # Start the program:
  240.   fResult "${@}"
  241.  
  242.  
  243.   # Exit with previous return code:
  244.   exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment