bash
Options
usage() {
cat <<USAGE
Usage: $0 [OPTIONS] [-d directory] [-t test] file
-h Show help
USAGE
}
while getopts "hd:t:" options; do
case $options in
h ) usage
exit;;
d ) directory=$OPTARG;;
t ) test=OPTARG;;
* ) usage
exit;;
esac
done
Paramètres venant d’un fichier
list=""
while IFS= read -r file
do
[ -f "$file" ] && list="$list $file"
done < "mon-fichier.txt"
echo $list
Le premier argument
file=$1
Tester l’existence d’un dossier
if [ ! -e "/path/to/directory" ]
then
echo "Le dossier n'existe pas";
exit;
fi
if [[ -d $from && -d $to ]]
then
echo "Les dossiers existent";
exit;
fi
Tester une chaine
if echo "$chaine" | grep -Eq '.*truc.*'
then
echo "ok"
else
echo "ko"
fi
Tester une URL
function isLive {
wget -q --spider $1
if [ $? -eq 0 ]; then
echo "[OK] $1"
else
echo "[ ] $1"
fi
}
isLive "http://neolao.com"
Envoyer un mail
echo "message" | mail contact@hostname
Effacer tous les dossiers .svn
find . -name ".svn" -type d -exec rm -rf {} \;
find . -name ".svn" -type d -delete
Trouver tous les fichiers contenant “Toto”
find . -name "description.xml" -type f -exec grep -l "Toto" {} \;
Copier d’après une recherche sur un des fichiers
find . -name "description.xml" -type f -exec grep -l "Toto" {} \; | while read filename; do cp /path/to/file $(dirname $filename); done
Afficher les clients qui ont un pattern dans leur config
for client in /path/to/dir/*;
do
grep -q "contentPattern" $client/config.xml && echo $(basename $client);
done
Poser une question
read -p "Dry run ? [y/n]" answer
case $answer in
[Yy]* ) echo "Yes";;
[Nn]* ) echo "No";;
* ) echo "I don't understand, bye bye ...";;
esac
Trouver le type d’un fichier
file -skz /path/to/file
Script à plusieurs options
#!/bin/bash
scriptPath="$( readlink -f "$( dirname "$0" )" )/$( basename "$0" )"
currentDirectory=$(dirname $scriptPath)
# Colors
Reset='\e[0m' # Text Reset
Yellow='\e[1;33m' # Yellow
Green='\e[1;32m' # Green
# Usage display
usage() {
echo -e "${Yellow}USAGE${Reset}"
echo -e "${Yellow}-----${Reset}"
echo -e " $0 [${Green}action${Reset}]"
echo ""
echo -e "${Yellow}ACTIONS${Reset}"
echo -e "${Yellow}-------${Reset}"
echo -e " - ${Green}action1${Reset} : Action 1"
echo -e " - ${Green}action2]${Reset} : Action 2"
echo ""
}
# Switch
case $1 in
action1 ) echo "Action 1 !!!"
exit;;
action2 ) echo "Action 2 !!!"
exit;;
* ) usage
exit;;
esac
Script qui complète les sous-titres
#!/bin/bash
scriptPath="$( readlink -f "$( dirname "$0" )" )/$( basename "$0" )"
currentDirectory=$(dirname $scriptPath)
target=$(readlink -e "$1")
createMerge=$2
if [[ -d $target ]]
then
filePaths=$(find $target -type f \( -name "*.mkv" ! -name "*VOSTFR*" -or -name "*.avi" ! -name "*VOSTFR*" -or -name "*.mp4" ! -name "*VOSTFR*" \) )
for filePath in $filePaths
do
file=${filePath##*/}
name=${file%.*}
extension=${file##*.}
directory=${filePath%$file}
# Check subtitle
subtitle="$directory$name.srt"
subtitle2="$directory$name.fr.srt"
subtitle3="$directory$name.fra.srt"
if [[ ! -f $subtitle && ! -f $subtitle2 && ! -f $subtitle3 ]]
then
echo "The subtitle is missing: $filePath"
subliminal -l fr --addic7ed-username neolao --addic7ed-password tototo $filePath
fi
# Check merged version
if [[ $createMerge == "merge" ]]
then
merged="$directory$name.VOSTFR.mkv"
if [[ ! -f $merged ]]
then
$currentDirectory/create-mkv.sh $filePath
fi
fi
done
fi
Quitter un script
trap ctrl_c INT
function ctrl_c() {
echo "** Trapped CTRL-C"
}
trap "exit" INT