[[http://tmade.de|Home tmade.de]]
[[http://wiki.tmade.de|Home Wiki]]
==== Variabel ====
variabel=value
echo $variabel
==== Debug ====
Set
set -x
Unset
set +x
==== IF/ELSE ====
The "if" syntax is dependant on the kind of condition. Basically there are 3 types:
1. file
2. integer
3. string
=== File ===
Example "file":
file=/test
if [ -e $file ]
then
echo "$file exist."
else
echo "$file does not exist."
fi
Common parameters (file):
e, -a #File exist
-f #File is a regular file
-d #File is a directory
-s #File is non-zero size
-h, -L #File is a symbolic link
-r, -w, -x #Check file permission
-u #File’s suid flag is set
-O #File owner is you
-G #File group same as yours
! #reverse
Another example for "file":
var=`cat file`
if echo $var | grep "search_string"
then
echo "search_string found"
else
echo "search_string _not_ found"
fi
Another file check examples:
if [ -f /tmp/foo.txt ]
then
echo "there´s foo.txt!"
rm /tmp/foo.txt
else
echo "The file does not exist!"
echo "Please create a file with the following command:"
echo "\"touch /tmp/foo.txt\""
fi
==Various conditions==
if [ -f $VAR1 ] && [ -f $VAR2 ] && [ -f $VAR3 ]
then ....
or like
if [[ -f $VAR1 && -f $VAR2 && -f $VAR3 ]]
then ....
or even
if [ -f $VAR1 -a -f $VAR2 -a -f $VAR3 ]
then ....
==elif==
if [ -r somefile ]; then
content=$(cat somefile)
elif [ -f somefile ]; then
echo "The file 'somefile' exists but is not readable to the script."
else
echo "The file 'somefile' does not exist."
fi
Another example:
if [ conditions ]; then
# Things
elif [ other_conditions ]; then
# Other things
else
# In case none of the above occurs
fi
===Integer===
Example "integer":
read num;
if [ $num -gt "10" ]
then
echo "$num is greater than 10"
fi
Common parameters (interger):
-eq #Is equal to
-ne #Not equal to
-gt #Greater than
-ge #Greater or equal
-lt #Less than
-le #Less or equal
===String===
Example "string":
if [[ $str1 = $str2 ]]
then
echo "They are equal."
fi
Common parameters (string):
=, == #Is equal to
=~ #advanced regular expression compare
!= #Not equal to
> #Greater than
< #Less than
-z #Null string
-n #Not null string
Note: To check other parameters use "man test", which uses same syntax!
==== Array ====
#Create array, read all "*.pgp" files from working directory and save it into array "array"
array=(*.pgp)
#save array-lengt to variable "arraylength"
arraylength=${#array[@]}
echo $arraylength
#loop runs from index 0 to arraylength
for filename in "${array[@]}"
do
echo "Filename=$filename"
gpg --batch --passphrase-file=$PASSPHRASEFILE $filename
done
Access manually array-entry [0]:
echo ${array[0]}
All entries:
echo ${array[*]}
==== For ====
#!/bin/sh
#Variable Declaration
startIP=31
endIP=42
ID=1
CAS=10.6.11.
#Restarting tomcat on CAS11 - CAS1x
for (( j = $startIP ; j <= $endIP; j++ ))
do
echo "Restarting Tomcat Node $ID"
echo "Connecting to $CAS$j"
echo "" | telnet $CAS$j 22 | grep "Escape character is" 2>&1 /dev/null && \
ssh root@$CAS$j '/etc/init.d/tomcat6 restart'
ID=$[ID+1]
sleep 30
done
for i in 1 2 3
do
echo $i
done
for i in `find / -name "*.mp3"`
do
rm $i
done
for i in *
do
rm *.mp3
done
for (( i = 0 ; i <= 5; i++ ))
do
echo "Welcome $i times"
done
Welcome 0 times
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
> do
> for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###
> do
> tot=`expr $i + $j`
> tmp=`expr $tot % 2`
> if [ $tmp -eq 0 ]; then
> echo -e -n "\033[47m "
> else
> echo -e -n "\033[40m "
> fi
> done
> echo -e -n "\033[40m" #### set back background colour to black
> echo "" #### print the new line ###
done
checkerboard:
for (( i = 1; i <= 5; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 5; j++ )) ### Inner for loop ###
do
echo -n "$i "
done
echo "" #### print the new line ###
done
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
for i in `ls -1`; do echo $i && sleep 1; done
for i in $(ls .pro*); do echo $i; done
==== While ====
Infinite loop:
while true
do
command
done
#!/bin/sh
while true
do
echo "test!"
sleep 5
done
Loop counts until i=11
i=1
n=2
while [ $i -le 10 ];
do
echo "$n * $i = `expr $i \* $n`";
i=`expr $i + 1`;
echo "i=$i"
done
#!/bin/bash
CHECK="true"
UIDSTART="3199"
while [ "$CHECK" = "true" ]
do
UIDGREP=`grep $UIDSTART /scripts/uid.txt`
if [ -z "$UIDGREP" ]
then
echo "user angelegt"
CHECK="false"
else
echo "$UIDSTART ist schon vorhanden"
UIDSTART=$((UIDSTART-1))
fi
done
EXTERNAL_PATH=/var/media/ftp/Freetz/external
(
trap : HUP
while [ ! -f "$EXTERNAL_PATH"/.external ]; do sleep 3; done
exec /etc/init.d/rc.external start
) &
#check and set iptables
/sbin/ifconfig -a |/bin/grep ppp0 && PPP_STATUS="0" || PPP_STATUS="1"
echo $PPP_STATUS
while [ $PPP_STATUS == 0 ]
do
/bin/echo PPP_STATUS=$PPP_STATUS
/sbin/iptables-restore < /scripts/iptables_restore_ppp0 && /bin/echo "iptables restored" || /bin/echo "iptables not restored"
/sbin/iptables-save
/sbin/ifconfig -a |/bin/grep ppp0 && PPP_STATUS="0" || PPP_STATUS="1"
if [ $PPP_STATUS == 0 ]
then
break
fi
/bin/sleep 5
done
Check, if file exist and terminate loop if file is in path:
SOCKET="/var/run/mysqld/mysqld.sock"
while [ ! -f $SOCKET ] ;
do
echo "$SOCKET does not exist."
sleep 10
done
==== Function ====
Example:
#! /bin/sh
start()
{
echo "start"
}
stop()
{
echo "stop"
}
t=`ps -ef|grep t[i].sh`
if [ $? -eq 0 ]
then
start
else
stop
fi
Example:
#!/bin/sh
###################################################################################################
delete()
{
echo delete application "\"$app1"\"!
#Variables
tomcat=/srv/www/tomcat6/
echo "Removing Deployed Application"
rm -r $tomcat/webapps/$app1
echo "Cleaning Nodes"
rm -r /.cluster/cdsl/?/srv/www/tomcat6/work/Catalina/localhost/$app1
rm -r /.cluster/cdsl/??/srv/www/tomcat6/work/Catalina/localhost/$app1
rm -r /.cluster/cdsl/default/srv/www/tomcat6/work/Catalina/localhost/$app1
rm -r /.cluster/cdsl/??/srv/www/tomcat6/temp/*
rm -r /.cluster/cdsl/?/srv/www/tomcat6/temp/*
rm -r /.cluster/cdsl/default/srv/www/tomcat6/temp/*
echo "done"
}
###################################################################################################
###################################################################################################
start ()
{
app1=0
echo "Please enter Application Name (e.g. applicationname)"
read -p "Application Name : " app1
if [ -z $app1 ];
then
echo "Please enter the application name WITHOUT spaces. Empty strings arent´t allowed as well!";
start
else
delete
fi
}
###################################################################################################
start
====Maths====
Math addition:
i=$((i+1)) user 0m0.992s
i=$((i++)) user 0m0.964s
((i=i+1)) user 0m0.760s
((i+=1)) user 0m0.700s
((i++)) user 0m0.644s
((++i)) user 0m0.556s
let "i=i+1" user 0m1.116s
let "i+=1" user 0m1.100s
let "i++" user 0m1.008s
let i=i+1 user 0m0.952s
let i+=1 user 0m1.040s
let i++ user 0m0.820s
declare -i i; i=i+1 user 0m0.528s
declare -i i; i+=1 user 0m0.492s
i=0; i=$(expr $i + 1) user 0m5.464s