腳本,sudo文件添加項

 

該腳本作爲練習只用,修改sudo文件還請使用visudo命令,防止修改錯誤造成安全事故!

--------------------------------------------

  練習實現在/etc/sudoers文件中交互式的添加內容,要求能根據用戶需求創建所需的組

  寫的很糾結~錯誤百出。並且是實現的算法有的太複雜了,先貼上原始的一;後期在進行修改了再附加。過程不多解釋。

 

方法(1)

  1. #!/bin/bash 
  2. #Author: Mo 
  3. #Date & Time: 2011-01-02-20:55:40 
  4. #Description:  
  5. #Version : 1.0.1 
  6.  
  7. runas=root 
  8. machine=ALL 
  9. ualias=' ' 
  10. halias=' ' 
  11.  
  12. mytrap(){ 
  13. echo -e "\nQuit...\n Clean all your input messsage..." 
  14. exit 1 
  15. trap 'mytrap'  SIGINT  
  16.  
  17. # user functions... ######################### 
  18. testuser() { 
  19.  if  cut -d: -f1 /etc/passwd | grep "^$1$" &>/dev/null; then  
  20.    return 0 
  21.   else 
  22.    echo "No user $1,please check ."  
  23.    return 99 
  24.  fi 
  25.   } 
  26.  
  27. adduser(){ 
  28.     while [ -z ${user} ] ;do 
  29.        read -p "Please input sudo user: " user 
  30.        testuser ${user} 
  31.        [ $? -eq 99 ] && user='' 
  32.     done 
  33.     uarray[${#uarray[*]}]=${user} 
  34.     user=' ' 
  35.  
  36. useralias() { 
  37.   read -p "Enter user alias name(upper):" ualias 
  38.   if  echo $ualias | grep "[^a-zA-Z]" &>/dev/null ;then 
  39.       echo "Wrong input!" 
  40.       exit 1 
  41.   else 
  42.      ualias=`echo ${ualias} | tr 'a-z' 'A-Z'
  43.   fi 
  44.  
  45.  flag1=y 
  46.  while [ "${flag1}" = "y" ] ;do 
  47.     adduser 
  48.     read -p "Wish to add another user(y/n): "  flag1 
  49.     flag1=${flag1:=y} 
  50.     if  echo "${flag1}"|grep "[YNyn]" &>/dev/null ;then 
  51.        [ "${flag1}" = "y" ] && uarray[${#uarray[*]}]="${user}," || uarray[${#uarray[*]}]=${user} 
  52.     else 
  53.        echo "Wrong Select!" 
  54.        exit 1 
  55.     fi 
  56.  
  57. done 
  58.  } 
  59. # host funcitons...####################### 
  60. addhost(){ 
  61.     host=' ' 
  62.     while [ -z ${host} ] ;do 
  63.        read -p "Please input host: " host 
  64.     done 
  65.     harray[${#harray[*]}]=${host} 
  66.  
  67. hostalias() { 
  68.   read -p "Enter host alias name(upper):" halias 
  69.   if  echo ${halias} | grep "[^a-zA-Z]" &>/dev/null ;then 
  70.       echo "Wrong Name!" 
  71.       exit 1 
  72.   else 
  73.      halias=`echo ${halias}| tr 'a-z' 'A-Z'
  74.   fi 
  75.  flag2=y 
  76.  while [ "${flag2}" = "y" ] ;do 
  77.     addhost 
  78.     read -p "Wish to add another host(y/n): "  flag2 
  79.     flag2=${flag2:=y} 
  80.     if  echo "${flag2}" | grep "[YNyn]" &>/dev/null ;then 
  81.        [ "${flag2}" = "y" ] && harray[${#harray[*]}-1]=${host}, || harray[${#harray[*]}-1]=${host} 
  82.     else 
  83.        echo "Wrong Select!" 
  84.        exit 1 
  85.     fi 
  86.  done 
  87.  } 
  88.  
  89. #command function...####################### 
  90.  
  91. addcomm(){ 
  92.     while [ -z ${comm} ] &>/etc/null ;do 
  93. #how to read a command line? 
  94.        read -p "Please input a sudo command: " comm1 comm2 
  95.        comm=`echo "${comm1} ${comm2}"
  96.     done 
  97.     carray[${#carray[*]}]=${comm} 
  98.     comm=' ' 
  99.  
  100. commalias() { 
  101.   read -p "Enter command alias name(upper):" calias 
  102.   if  echo ${calias} | grep "[^a-zA-Z]" &>/dev/null ;then 
  103.       echo "Wrong input!" 
  104.       exit 1 
  105.   else 
  106.      calias=`echo ${calias} | tr 'a-z' 'A-Z'
  107.   fi 
  108.  
  109.  flag3=y 
  110.  while [ "${flag3}" = "y" ] ;do 
  111.     addcomm 
  112.     read -p "Wish to add another command(y/n): "  flag3 
  113.     flag3=${flag3:=y} 
  114.     if  echo "${flag3}"|grep "[YNyn]" &>/dev/null ;then 
  115.        [ "${flag3}" = "y" ] && carray[${#carray[*]}]=${comm}, || carray[${#carray[*]}]=${comm} 
  116.     else 
  117.        echo "Wrong Select!" 
  118.        exit 1 
  119.     fi 
  120.  
  121. done 
  122.  } 
  123.     
  124. # user add... ############################# 
  125. cat  <<EOF 
  126.        1) Create user alias; 
  127.        2) Add a single user;  
  128. EOF 
  129. read -p "Enter your select: " select1 
  130.  
  131. case ${select1} in 
  132.  1) 
  133.    useralias 
  134.    ;; 
  135.  2) 
  136.    adduser 
  137.    ;; 
  138.  *) 
  139.    echo "Wrong select!" 
  140.    exit 1 
  141.    ;; 
  142.  esac 
  143.  
  144. # host add... ############################### 
  145. cat  <<EOF 
  146.        1) Create host alias; 
  147.        2) Add a single host; 
  148. EOF 
  149. read -p "Enter your select: " select2 
  150.  
  151. case ${select2} in 
  152.  1) 
  153.    hostalias 
  154.    ;; 
  155.  2) 
  156.    addhost 
  157.    ;; 
  158.  *) 
  159.    echo "Wrong select!" 
  160.    exit 1 
  161.    ;; 
  162.  esac 
  163.  
  164. # command add...################################# 
  165. cat  <<EOF 
  166.        1) Create command alias; 
  167.        2) Add a single commond; 
  168. EOF 
  169. read -p "Enter your select: " select3 
  170.  
  171. case ${select3} in 
  172.  1) 
  173.    commalias 
  174.    ;; 
  175.  2) 
  176.    addcomm 
  177.    ;; 
  178.  *) 
  179.    echo "Wrong select!" 
  180.    exit 1 
  181.    ;; 
  182. esac 
  183.  
  184.  
  185. # appent thess informatin to file:/etc/sudoers 
  186. # US HO = (root) COM 
  187.  
  188. if [ ${#uarray[*]} -gt 1 ];then 
  189.    echo  "User_Alias    ${ualias} = ${uarray[*]} " >> /etc/sudoers 
  190. fi 
  191.  
  192. if [ ${#harray[*]} -gt 1 ];then 
  193.    echo  "Host_Alias    ${halias} = ${harray[*]} " >> /etc/sudoers 
  194. fi 
  195.  
  196. if [ ${#carray[*]} -gt 1 ];then 
  197.    echo  "Comm_Alias    ${calias} = ${carray[*]} " >> /etc/sudoers 
  198. fi 
  199.  
  200. LINE="`[ ${#uarray[*]} -gt 1 ] && echo -n "${ualias}" || echo -n "${uarray[*]}" `" 
  201. LINE="${LINE}   `[ ${#harray[*]} -gt 1 ] && echo -n "${halias}" || echo -n "${harray[*]}" ` " 
  202. LINE="${LINE}=(root)     " 
  203. LINE="${LINE}   `[ ${#carray[*]} -gt 1 ] && echo -n "${calias}" || echo -n "${carray[*]}" ` " 
  204. echo "${LINE}" >> /etc/sudoers 
  205.  
  206. echo -e  "\033[32mAll Done!\033[0m" 

 附註:如何從鍵盤讀入一行數據並且賦值給變量。

read用法:
read [ -p ][  -r ][ -s ][ -u [ n ] ] [  VariableName ]
read 命令從標準輸入中讀取一行,並把輸入行的每個字段的值指定給 shell 變量,用 IFS(內部字段分隔符)變量中的字符作爲分隔符。VariableName 參數指定 shell 變量的名稱,shell 變量獲取輸入行一個字段的值。由VariableName 參數指定的第一個 shell 變量指定給每一個字段的值,由 VariableName 參數指定的第二個 shell 變量指定給第二個字段的值,以此類推,直到最後一個字段。如果標準輸入行的字段比相應的由 VariableName 參數指定的 shell 變量的個數多,把全部餘下的字段的值賦給指定的最後的 shell 變量。如果比 shell 變量的個數少,則剩餘的 shell 變量被設置爲空字符串。

如果輸入的一個串中間有空格,read一個變量,該變量顯然只能截取並得到串中第一個空格前的子串。未解決丟失,read時,用兩個變量,則第一個變量會獲取第一個空格前的子串,第二個變量會獲取其後的所有串。然後將兩個變量銜接即可

例如97行:

  • read -p "Please input a sudo command: " comm1 comm2 
  • comm=`echo "${comm1} ${comm2}"`

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章