Guest User

Untitled

a guest
Feb 21st, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.23 KB | None | 0 0
  1. # TP 03 : Shell bash
  2.  
  3. ## Exercice : paramètres
  4.  
  5. Ecrire un script affichant le nombre de paramètres, le nom du script, la valeur du troisième paramètre ainsi que celle de tous les paramètres.
  6.  
  7. On utilise succesivement les variables $# , $0 , $3 , $@.
  8.  
  9. #!/bin/bash
  10. #Bretzner Raphaël
  11. echo "Bonjour, vous avez rentré $# paramètres"
  12. echo "Le nom du script est $0"
  13. echo "Le 3ème paramètre est $3"
  14. echo "Voici la liste des paramètres : $@"
  15.  
  16.  
  17. ## Exercice : verification du nombre de paramètres
  18.  
  19. Ecrire un script qui concatène les deux paramètres et affiche une erreur si le nombre de paramètre ne vaut pas 2.
  20.  
  21. On vérifie tout d'abord avec une condition si l'utilisateur a rentré deux arguments. Si c'est le cas, on stocke dans une variable CONCAT le premier arguments ($1) et le deuxième ($2). Puis on l'affiche.
  22.  
  23. #!/bin/bash
  24. #Bretzner Raphaël
  25. if [ $# -eq 2 ]
  26. then
  27. CONCAT="$1$2"
  28. echo $CONCAT
  29. else
  30. echo "Erreur, vous devez rentrer 2 paramètres."
  31. fi
  32.  
  33.  
  34. ## Exercice : argument type et droits
  35.  
  36. Creer un script qui precisera le type du fichier passe en paramètre, ses permissions d’accès pour l’utilisateur, ou s’il n’existe pas.
  37.  
  38. Check que l'utilisateur ai entré un argument. Si oui :
  39. Check le type du fichier dont le nom a été saisi en argument, et on stocke son type (répertoire/fichier ordinaire) dans une variable
  40. Affiche après le check.
  41. Plusieurs tests de suite pour vérifier les permissions du fichier (lecture, écriture, execution) en les concaténant à chaque fois dans une variable
  42. On affiche après cette série de test le contenu de la variable.
  43.  
  44. #!/bin/bash
  45. #Bretzner Raphaël
  46. if [ $# -eq 1 ]
  47. then
  48. if [[ -d $1 ]]
  49. then
  50. path_file="répertoire"
  51.  
  52. elif [[ -f $1 ]]
  53. then
  54. path_file="fichier ordinaire"
  55. if [ -s $1 ]
  56. then
  57. path_file="$path_file qui n'est pas vide"
  58. else
  59. path_file="$path_file vide"
  60. fi
  61.  
  62. else
  63. echo "$1 n'est pas valide"
  64. exit 1
  65. fi
  66.  
  67. echo "Le fichier $1 est un $path_file"
  68.  
  69. if [ -r $1 ]
  70. then
  71. permission="lecture"
  72. fi
  73. if [ -w $1 ]
  74. then
  75. permission="$permission écriture"
  76. fi
  77. if [ -x $1 ]
  78. then
  79. permission="$permission exécution"
  80. fi
  81.  
  82. echo "$0 est accessible par $USER en $permission"
  83. else
  84. echo "Erreur, vous devez rentrer 1 paramètres."
  85. fi
  86. then
  87. fichier_type_string="fichier ordinaire"
  88. if [ -s $1 ]
  89. then
  90. fichier_type_string="$fichier_type_string qui n'est pas vide"
  91. else
  92. fichier_type_string="$fichier_type_string vide"
  93. fi
  94. else
  95. echo "$1 n'est pas valide"
  96. exit 1
  97. fi
  98. echo "Le fichier $1 est un $fichier_type_string"
  99. if [ -r $1 ]
  100. then
  101. permission="lecture"
  102. fi
  103. if [ -w $1 ]
  104. then
  105. permission="$permission écriture"
  106. fi
  107. if [ -x $1 ]
  108. then
  109. permission="$permission exécution"
  110. fi
  111. echo "$0 est accessible par $USER en $permission"
  112. else
  113. echo "Erreur, vous devez rentrer 1 paramètres."
  114. fi
  115.  
  116.  
  117. ## Exercice : Afficher le contenu d’un repertoire
  118.  
  119. Ecrire un script bash permettant d’afficher le contenu d’un repertoire en separant les fichiers et les (sous)repertoires.
  120.  
  121. Check s'il n'y a qu'un seul paramètre.
  122. Si oui, check si celui correspond bien à un nom de répertoire.
  123. Si c'est le cas, on parcours la liste des fichiers "simples" du répertoire à l'aide d'une boucle "for" et on les affiche.
  124. On fait de même pour les répertoires.
  125.  
  126. #!/bin/bash
  127. #Bretzner Raphaël
  128. if [ $# -eq 1 ]
  129. then
  130. if [[ -d $1 ]]
  131. then
  132. echo "####### fichiers dans $1"
  133. for file in "$1"*
  134. do
  135. if [[ -f "$file" ]]
  136. then
  137. echo $file
  138. fi
  139. done
  140. echo "####### repertoires dans $1"
  141. for file in "$1"*
  142. do
  143. if [[ -d "$file" ]]
  144. then
  145. echo $file
  146. fi
  147. done
  148. else
  149. echo "Erreur, vous devez rentrer un répertoire et non un fichier ordinaire"
  150. fi
  151. else
  152. echo "Erreur, vous devez rentrer 1 paramètres."
  153. fi
  154.  
  155.  
  156.  
  157. ## Exercice : Lister les utilisateurs
  158.  
  159. Ecrire un script bash affichant la liste des noms de login des utilisateurs definis dans /etc/passwd ayant un UID superieur à 100.
  160.  
  161. Check dans un premier temps qu'il n'y ai pas de paramètres.
  162. Si ok, on parcours, avec awk, les lignes du fichier /etc/passwd, qui correspondent chacune à un utilisateur.
  163. On effectue une condition pour vérifier le 3ème élément (UID), soit supérieur ou égal à 100.
  164. Si la condition est respectée on affiche le nom de l'utilisateur et son UID.
  165.  
  166. #!/bin/bash
  167. #Bretzner Raphaël
  168. if [ $# -eq 0 ]
  169. then
  170. awk -F':' '$3>99 {print User $1 " UID: " $3}' /etc/passwd | column -t | grep -v nobody
  171. else
  172. echo "Erreur, vous ne devez pas entrer de paramètres"
  173. fi
  174.  
  175.  
  176. ## Exercice : Mon utilisateur existe t’il
  177.  
  178. Ecrire un script qui verifie si un utilisateur existe deja.
  179. - en fonction d’un login passe en paramètres
  180. - en fonction d’un UID passe en paramètres
  181. Si l’utilisateur existe retourner son UID. Sinon ne rien renvoyer.
  182.  
  183. Check qu'il n'y a qu'un seul paramètre.
  184. Si oui, on parcours avec la commande awk les lignes du fichier /etc/passwd en lui transmettant la variable "var" contenant le paramètre.
  185. Check que ce dernier corresponde au nom de l'utilisateur ($1) ou au UID ($3).
  186. Si vrai alors l'utilisateur existe et affiche un message contenant le nom et l'UID de l'utilisateur recherché.
  187.  
  188.  
  189. #!/bin/bash
  190. if [ $# -eq 1 ]
  191. then
  192. dir="/etc/passwd"
  193. awk -v var=$1 -F : '{
  194. if(var==$1 || var==$3)
  195. print "Cet utilisateur nommé " $1 " existe avec comme UID : " $3
  196. }' $dir
  197. else
  198. echo "Erreur, vous devez rentrer un UID valide ou un nom d'utilisateur"
  199. fi
  200.  
  201.  
  202. ## Exercice : Creation utilisateur
  203.  
  204. Ecrire un script pour creer un compte utilisateur voir :
  205. man useradd
  206. Utilisez votre script de verification d’existance d’utilisateur avant de creer.
  207. Il faudra verifier que l’utilisateur en cours d’execution est bien root voir
  208. echo $USER
  209. Il faudra creer son home dans /home apres avoir verifier qu’il n'y a pas déjà un repertoire
  210. portant le même nom.
  211. Il faudra repondre à une suite de question : voir
  212. man read
  213. - login
  214. - Nom
  215. - Prenom
  216. - UID
  217. - GID
  218. - Commentaires
  219.  
  220.  
  221. #!/bin/bash
  222. #Bretzner Raphaël
  223. ROOT_UID=0
  224. SUCCESS=0
  225. E_USEREXISTS=70
  226.  
  227. # Run as root, of course. (this might not be necessary, because we have to run the script somehow with root anyway)
  228. if [ "$UID" -ne "$ROOT_UID" ]
  229. then
  230. echo "Must be root to run this script."
  231. exit $E_NOTROOT
  232. fi
  233.  
  234. #test, if both argument are there
  235. if [ $# -eq 2 ]; then
  236. username=$1
  237. pass=$2
  238.  
  239. # Check if user already exists.
  240. grep -q "$username" /etc/passwd
  241. if [ $? -eq $SUCCESS ]
  242. then
  243. echo "User $username does already exist."
  244. echo "please chose another username."
  245. exit $E_USEREXISTS
  246. fi
  247.  
  248.  
  249. useradd -p `mkpasswd "$pass"` -d /home/"$username" -m -g users -s /bin/bash "$username"
  250.  
  251. echo "the account is setup"
  252.  
  253. else
  254. echo " this programm needs 2 arguments you have given $# "
  255. echo " you have to call the script $0 username and the pass "
  256. fi
  257.  
  258. exit 0
  259.  
  260. ## Exercice : lecture au clavier
  261.  
  262.  
  263.  
  264. ## Exercice : appreciation
  265.  
  266. Creer un script qui demande à l’utilisateur de saisir une note et qui affiche un message en
  267. fonction de cette note :
  268. - “très bien” si la note est entre 16 et 20 ;
  269. - “bien” lorsqu’elle est entre 14 et 16 ;
  270. - “assez bien” si la note est entre 12 et 14 ;
  271. - “moyen” si la note est entre 10 et 12 ;
  272. - “insuffisant” si la note est inférieur à 10.
  273. Pour quitter le programme l’utiliateur devra appuyer sur q.
  274.  
  275. #!/bin/bash
  276. #Bretzner Raphaël
  277. note=0
  278. i=0
  279.  
  280. until [ "$note" -lt 0 ]; do
  281. echo "Entrez votre note (q pour quitter) :"
  282. read -r note
  283. if [ "$note" = "q" ]; then
  284. note=-1
  285. echo "au revoir !"
  286. elif [ "$note" -ge 16 ]; then
  287. echo "très bien"
  288. elif [ "$note" -ge 14 ]; then
  289. echo "bien"
  290. elif [ "$note" -ge 12 ]; then
  291. echo "assez bien"
  292. elif [ "$note" -ge 10 ]; then
  293. echo "moyen"
  294. elif [ "$note" -ge 0 ]; then
  295. echo "insuffisant"
  296. else
  297. echo "au revoir !"
  298. fi
  299. let i=$i+1
  300. done
  301.  
  302. if [ "$i" -le 0 ]; then
  303. let i=1
  304. fi
  305.  
  306.  
  307. Fin
Add Comment
Please, Sign In to add comment