Pour les personnes motivées à faire des scripts bash / sh, voici mes liens qui m’ont déjà bien aidé à plusieurs reprises:
-
howtos.linux.com/guides/abs-guide/index.shtml
(- linuxreviews.org/beginner/abs-guide/) - freeos.com/guides/lsst/
- tuxfiles.org/linuxhelp/cli.html
et un exemple créé de mes propres mains que j’utilise tous les jours (fier fier )
[code]#!/bin/sh
TITLE="=== DEBIAN UPDATE MANAGER ===“
AUTHOR=”@2005-07 ghostintheshell from http://forum.debian-fr.org/"
VERSION=“v.2005.10.01”
To do:
- the to do list o_0’
DECLARATIONS
------------
OPTIONS (system)
#the sources file
SOURCES="/etc/apt/sources.list"
#editor to use
EDITOR="gedit"
EDITORPATH=$(which $EDITOR) #‘which’ returns the full path of the selected editor
#apt-get
APTGET="apt-get"
APTGETPATH=$(which $APTGET)
OPTIONS (script)
#verbose mode?
VERBOSE=1 #0 for silent, 1 for verbose
#debug mode?
DEBUG=0 #0 for normal, 1 for debug
CONSTANTS
#break options
WAIT=1 #wait for a user action
NOWAIT=0 #just display a break
PUBLIC DECLARATIONS
gsPossibilities="“
gsPossibilitiesDefault=”“
gsAnswer=”"
FUNCTIONS
---------
function displayDEBUG() {
if [ $DEBUG -eq 1 ]; then echo “[DEBUG] $1”; fi
}
function displayMESSAGE() {
if [ $VERBOSE -eq 1 ]; then echo “==> $1 …” && echo; fi
}
function displayERROR() {
echo “[ERROR] $1”
}
function displayBREAK() {
echo
if [ $1 -eq 1 ]; then echo -n “— Press to continue —”; read foo; echo; fi
}
function editSources() {
iError=0
displayMESSAGE “Opening the sources list with $EDITOR”
$EDITORPATH $SOURCES > /dev/null 2>&1
if [ $? -ne 0 ]; then
iError=1
displayERROR "Please check your parameters!"
displayERROR "Editor = \"$EDITOR\""
sMoreHelp=""; if [ -z $EDITORPATH ]; then sMoreHelp=" !!! not found !!!"; fi
displayERROR "Editor path = \"$EDITORPATH\"$sMoreHelp"
sMoreHelp=""; if [ ! -e $SOURCES ]; then sMoreHelp=" !!! not found !!!"; fi
displayERROR "Sources file = \"$SOURCES\"$sMoreHelp"
displayBREAK $WAIT
fi
return $iError
}
function updatePackageslist() {
displayMESSAGE "Updating"
apt-get update
}
function simulatePackages() {
iNewPackage=1
displayMESSAGE "Doing simulation"
if [ $VERBOSE -eq 1 ]; then
apt-get upgrade --simulate --show-upgraded
else
apt-get upgrade --simulate
fi
sNewPackage="$(apt-get dist-upgrade -s | grep "newly installed" | grep "[1-9]")"
if [ -z "$sNewPackage" ]; then iNewPackage=0; fi
return $iNewPackage
}
function upgradePackages() {
displayMESSAGE "Upgrading"
if [ $VERBOSE -eq 1 ]; then
apt-get upgrade --show-upgraded
else
apt-get upgrade
fi
}
function upgradeSmart() {
displayMESSAGE "Smart upgrading"
apt-get dist-upgrade --show-upgraded
}
function checkDependencies() {
displayMESSAGE "Checking dependencies"
apt-get check
}
function cleanOldarchives() {
displayMESSAGE "Cleaning old archives"
apt-get autoclean
}
function writeQuestionOrInfo {
echo
case $1 in
"A")
echo -n "[1/5] Edit the sources list ($SOURCES) [y(es)/N(o)/e(x)it]?"
gsPossibilities=“ynx”; gsPossibilitiesDefault=“n”
;;
“B”)
echo -n “[2/5] Update the list of available packages [Y(es)/n(o)/®estart/e(x)it]?”
gsPossibilities=“ynrx”; gsPossibilitiesDefault=“y”
;;
“C”)
echo -n "[3/5] Proceed to an upgrade simulation [C(ontinue)/®estart/e(x)it]?"
gsPossibilities=“cbrx”; gsPossibilitiesDefault=“c”
;;
“D1”)
echo -n "[4/5] Proceed to (a smart) upgrade [(Y)es/(n)o/(s)tandard/®estart/e(x)it]?"
gsPossibilities=“ynsrx”; gsPossibilitiesDefault=“y”
;;
“D2”)
echo “[4/5] No need to upgrade [C(ontinue)]!”
;;
“E”)
echo -n "[5/5] Quit [e(X)it/®estart/(m)ore]?"
gsPossibilities=“xrm”; gsPossibilitiesDefault=“x”
;;
“M1”)
echo -n "[+] Check dependencies [Y(es)/n(o)/®estart/e(x)it]?"
gsPossibilities=“ynrx”; gsPossibilitiesDefault=“y”
;;
“M2”)
echo -n "[+] Clean old archives [Y(es)/n(o)/®estart/e(x)it]?"
gsPossibilities=“ynrx”; gsPossibilitiesDefault=“y”
;;
*)
;;
esac
}
function readAnswer {
while :
do
echo -n " "; read sInput
if [ "$sInput" = "" ]; then sInput=$gsPossibilitiesDefault; fi #default answer if empty answer detected
if [ "${#sInput}" -ne 1 ]; then sInput="dummy"; fi #answer length must be only 1 character!
if echo $1 | grep -q "$sInput"; then
gsAnswer=$sInput; break
else
echo -n "WTF!?"
fi
done
}
function executeAction {
let iReturn=0
case $1 in
"A")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"y"|"Y")
editSources; iReturn=$?
;;
esac
;;
"B")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"y"|"Y")
updatePackageslist
;;
esac
;;
"C")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"c"|"C")
simulatePackages; iReturn=$?
;;
esac
;;
"D1")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"y"|"Y")
upgradeSmart
;;
"s"|"S")
upgradePackages
;;
esac
;;
"D2")
writeQuestionOrInfo $1;
;;
"E")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"m"|"M")
iReturn=253
;;
esac
;;
"M1")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"y"|"Y")
checkDependencies
;;
esac
;;
"M2")
writeQuestionOrInfo $1; readAnswer $gsPossibilities
case $gsAnswer in
"y"|"Y")
cleanOldarchives
;;
esac
;;
esac
case $gsAnswer in
"x"|"X"|"q"|"Q")
iReturn=255 #exit
;;
"r"|"R")
iReturn=254 #restart
;;
esac
return $iReturn
}
MAIN
----
#welcome buddy
clear; echo -e "$TITLE ($VERSION)\n"
let iContinue=0
#some verifications
if [ -z $APTGETPATH ]; then
let iContinue=99
displayERROR "Sorry $APTGET is not found on this system!"
displayBREAK $WAIT
fi
#go for it
if [ $iContinue -eq 0 ]; then
while :
do
if [ $iContinue -eq 0 ]; then
clear; echo -e "$TITLE ($VERSION)\n\nUsing $($APTGET -v | grep "apt")"
let iContinue=1
fi
#[A] Edit the sources list?
if [ $iContinue -eq 1 ]; then
executeAction "A"
case $? in
255) break;;
254) iContinue=0;;
1) iContinue=0;;
esac
fi
#[B] Update
if [ $iContinue -eq 1 ]; then
executeAction "B"
case $? in
255) break;;
254) iContinue=0;;
esac
fi
#[C] Proceed to upgrade simulation?
if [ $iContinue -eq 1 ]; then
let iNewPackage=0
executeAction "C"
case $? in
255) break;;
254) iContinue=0;;
1) iNewPackage=1;;
esac
fi
#[D] Proceed to (a smart) upgrade?
if [ $iContinue -eq 1 ]; then
if [ $iNewPackage -eq 1 ]; then
executeAction "D1"
case $? in
255) break;;
254) iContinue=0;;
esac
else
executeAction "D2"
fi
fi
#[+] More options #1 (Check dependencies)?
if [ $iContinue -eq 2 ]; then
executeAction "M1"
case $? in
255) break;;
254) iContinue=0;;
esac
fi
#[+] More options #2 (Clean old archives)?
if [ $iContinue -eq 2 ]; then
executeAction "M2"
case $? in
255) break;;
254) iContinue=0;;
esac
fi
#[E] Quit?
if [ $iContinue -eq 1 ] || [ $iContinue -eq 2 ]; then
executeAction "E"
case $? in
255) break;;
254) iContinue=0;;
253) iContinue=2;;
esac
fi
done
fi
#see you buddy
echo; echo “Bye …”; echo
[/code]