<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://entorb.net//wiki/index.php?action=history&amp;feed=atom&amp;title=Linux_Bash_Shell_Scripting</id>
	<title>Linux Bash Shell Scripting - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://entorb.net//wiki/index.php?action=history&amp;feed=atom&amp;title=Linux_Bash_Shell_Scripting"/>
	<link rel="alternate" type="text/html" href="https://entorb.net//wiki/index.php?title=Linux_Bash_Shell_Scripting&amp;action=history"/>
	<updated>2026-05-06T09:41:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://entorb.net//wiki/index.php?title=Linux_Bash_Shell_Scripting&amp;diff=5386&amp;oldid=prev</id>
		<title>Torben: /* Parameters */</title>
		<link rel="alternate" type="text/html" href="https://entorb.net//wiki/index.php?title=Linux_Bash_Shell_Scripting&amp;diff=5386&amp;oldid=prev"/>
		<updated>2026-01-17T05:26:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Parameters&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
===Bash commands===&lt;br /&gt;
 rm -rf dir   # do not show warning if not existing&lt;br /&gt;
 mkdir -p dir # do not print warning if already existing AND make needed parents&lt;br /&gt;
&lt;br /&gt;
===Output===&lt;br /&gt;
View File &lt;br /&gt;
 less File&lt;br /&gt;
Print last line of file&lt;br /&gt;
 tail -1 File&lt;br /&gt;
Print last line, column 2 of file (cut expects tab separating)&lt;br /&gt;
 tail -1 File | cut -f2&lt;br /&gt;
Follow changes in (log)file&lt;br /&gt;
 tail -f File&lt;br /&gt;
Print file contents to std output&lt;br /&gt;
 cat File&lt;br /&gt;
Filter contents of file to std output&lt;br /&gt;
 grep &amp;quot;ERROR&amp;quot; File&lt;br /&gt;
Filter contents of file to std output (case-insensitive)&lt;br /&gt;
 grep -i &amp;quot;error&amp;quot; File&lt;br /&gt;
Filter contents of file to std output, +2 lines before +1 following lines each&lt;br /&gt;
 grep -B2 -A1 &amp;quot;ERROR&amp;quot; File&lt;br /&gt;
Print file contents to std output, starting at key word&lt;br /&gt;
 grep -A9999999 &amp;quot;2016-04-19T10:38&amp;quot; File&lt;br /&gt;
Save program output (script/grep/cat...) into file&lt;br /&gt;
 sh script.sh &amp;gt; log.txt      # std output, (errors to terminal)&lt;br /&gt;
 sh script.sh 1&amp;gt; log.txt 2&amp;gt; log-errors.txt  # separate files&lt;br /&gt;
 sh script.sh &amp;amp;&amp;gt; log.txt     # std and errors both to 1 file&lt;br /&gt;
Send output to file and terminal&lt;br /&gt;
 touch log.txt &amp;amp; tail -f log.txt &amp;amp; sh script.sh &amp;gt; log.txt&lt;br /&gt;
Piping &lt;br /&gt;
 sh script.sh | less &lt;br /&gt;
Filtering of output&lt;br /&gt;
 sh script.sh | grep tmenke&lt;br /&gt;
&lt;br /&gt;
====Search file contents in dir recursively====&lt;br /&gt;
From [https://stackoverflow.com/posts/16957078/timeline]&lt;br /&gt;
 grep -rn &amp;#039;/path/to/somewhere/&amp;#039; -e &amp;#039;pattern&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Input===&lt;br /&gt;
====Enter a value====&lt;br /&gt;
 echo &amp;quot;Enter to continue, CTRL+C to cancel&amp;quot;&lt;br /&gt;
 read ok&lt;br /&gt;
 &lt;br /&gt;
 echo -n &amp;quot;Was? &amp;quot;&lt;br /&gt;
 read var&lt;br /&gt;
 echo &amp;quot;$var&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Dialog Input====&lt;br /&gt;
 dialog --yesno &amp;quot;Cleanup Old Backups First&amp;quot; 0 0&lt;br /&gt;
 CleanUpBackups=$?&lt;br /&gt;
 # yes -&amp;gt; 0 # no -&amp;gt; 1&lt;br /&gt;
 if [ $CleanUpBackups -eq 0 ] # spaces needed!!!&lt;br /&gt;
   then&lt;br /&gt;
   perl /save/_save/backupPlatteAufraemen/loeschen2.pl&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Loops===&lt;br /&gt;
Zip all subdirs&lt;br /&gt;
 for D in `ls -d */`&lt;br /&gt;
 do&lt;br /&gt;
     # remove tailing /&lt;br /&gt;
     D=${D%/}&lt;br /&gt;
     echo === $D ====&lt;br /&gt;
     cd $D&lt;br /&gt;
     zip -rq9 ~/sicher/html/$D.zip .&lt;br /&gt;
     # tar cfz ~/sicher/html/$D.tgz .&lt;br /&gt;
     cd ..&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Check if variable in list&lt;br /&gt;
 if [[ &amp;quot;$D&amp;quot; =~ ^(hpmor-en/|DukeTypem2D/)$ ]]; then&lt;br /&gt;
     echo skipping $D&lt;br /&gt;
&lt;br /&gt;
Good overview of parameters for if [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html]&lt;br /&gt;
&amp;lt;br&amp;gt;If&lt;br /&gt;
 if [ -d &amp;quot;backup.0&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;gibts&amp;quot;&lt;br /&gt;
 else &lt;br /&gt;
   echo &amp;quot;gibts nicht&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
one-liner:&lt;br /&gt;
  if [ -d &amp;quot;backup.0&amp;quot; ] ; then sudo mv backup.0 backup.1 ; fi&lt;br /&gt;
&lt;br /&gt;
Check if process is running&lt;br /&gt;
 if [ ! &amp;quot;$(pidof workrave)&amp;quot; ] ; then&lt;br /&gt;
   nohup workrave&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
While&amp;lt;br&amp;gt;&lt;br /&gt;
Normal loop&lt;br /&gt;
 i=1&lt;br /&gt;
 while [ $i -le 4 ] do&lt;br /&gt;
 (( i++ ))&lt;br /&gt;
 done&lt;br /&gt;
Endless loop&lt;br /&gt;
 while true; do&lt;br /&gt;
     # ...&lt;br /&gt;
     echo &amp;quot;Enter to continue, CTRL+C to cancel&amp;quot;&lt;br /&gt;
     read user_input&lt;br /&gt;
 done&lt;br /&gt;
For loop&lt;br /&gt;
 for FILE in *.txt; &lt;br /&gt;
   do &lt;br /&gt;
   mv &amp;quot;$FILE&amp;quot; `echo $FILE | tr &amp;#039; &amp;#039; &amp;#039;_&amp;#039;`&lt;br /&gt;
   done&lt;br /&gt;
&lt;br /&gt;
Check if files matching *.xml exist, store Number as string and print it&lt;br /&gt;
 NUM=$(find $TRANSPORT/*.xml -type f 2&amp;gt; /dev/null |wc -l)&lt;br /&gt;
 echo $NUM&lt;br /&gt;
 if [ $NUM != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
 echo &amp;quot;$NUM files found, copying&amp;quot; &lt;br /&gt;
 else &lt;br /&gt;
 echo &amp;quot;No files found, exiting&amp;quot; &lt;br /&gt;
 exit 0&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
====Loop over contents / columns of file====&lt;br /&gt;
file contains tab separated columns $1 -&amp;gt; column1 etc.&lt;br /&gt;
 while read line ; do&lt;br /&gt;
     set $line&lt;br /&gt;
 	myCommit=$1&lt;br /&gt;
 	myDate=$2&lt;br /&gt;
     echo &amp;quot;$myCommit ; $myDate&amp;quot;&lt;br /&gt;
 done &amp;lt;&amp;quot;history-change.tsv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Exit upon Error===&lt;br /&gt;
 set -e&lt;br /&gt;
 touch /tmp/not_found.txt&lt;br /&gt;
 echo will not reach here&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
from [http://stackoverflow.com/questions/3534280/how-can-i-pass-a-file-argument-to-my-bash-script-using-a-terminal-command-in-lin]&lt;br /&gt;
 OPTIONS=$(getopt -o f:t -l file:,titlepage -- &amp;quot;$@&amp;quot;)&lt;br /&gt;
 if [ $? -ne 0 ]; then&lt;br /&gt;
   echo &amp;quot;getopt error&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 eval set -- $OPTIONS&lt;br /&gt;
 while true; do&lt;br /&gt;
   case &amp;quot;$1&amp;quot; in&lt;br /&gt;
     -f|--file) FILE=&amp;quot;$2&amp;quot; ; shift ;;&lt;br /&gt;
     -t|--titlepage) TITLEPAGE=1 ;;&lt;br /&gt;
     --)        shift ; break ;;&lt;br /&gt;
     *)         echo &amp;quot;unknown option: $1&amp;quot; ; exit 1 ;;&lt;br /&gt;
   esac&lt;br /&gt;
   shift&lt;br /&gt;
 done&lt;br /&gt;
 if [ $# -ne 0 ]; then&lt;br /&gt;
   echo &amp;quot;unknown option(s): $@&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if [ ! $FILE ]; then&lt;br /&gt;
   echo &amp;quot;no file given as parameter&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 if [ ! -f $FILE ]; then&lt;br /&gt;
   echo &amp;quot;file &amp;#039;$FILE&amp;#039; not found&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 # echo &amp;quot;titlepage: $TITLEPAGE&amp;quot;&lt;br /&gt;
 # echo &amp;quot;file: $FILE&amp;quot;&lt;br /&gt;
 # exit 1&lt;br /&gt;
&lt;br /&gt;
===Combine find and some other command e.g chmod===&lt;br /&gt;
 # chmod for dirs&lt;br /&gt;
 find -type d -exec chmod g+xs {} \;&lt;br /&gt;
 &lt;br /&gt;
 # make scripts excecuteable&lt;br /&gt;
 find . -name &amp;quot;*.sh&amp;quot; -exec chmod 744 {} \;&lt;br /&gt;
 &lt;br /&gt;
 # remove .zip files older 30 days&lt;br /&gt;
 find ./R*/logs/*.zip -mtime +30 -exec rm {} \;&lt;br /&gt;
 &lt;br /&gt;
 # Copy empty Directory Structure&lt;br /&gt;
 mkdir /Zielverzeichnis &lt;br /&gt;
 cd Quellverzeichnis&lt;br /&gt;
 find . -type d -depth | cpio -pvdma /Zielverzeichnis/&lt;br /&gt;
&lt;br /&gt;
===sed===&lt;br /&gt;
If you want to replace the text &amp;#039;asdf&amp;#039; by &amp;#039;qwert&amp;#039; in all &amp;#039;*.txt&amp;#039; files in a directory at once, use the following command:&lt;br /&gt;
 sed -i -e &amp;#039;s/asdf/qwert/g&amp;#039; *.txt&lt;br /&gt;
&lt;br /&gt;
add a line to file&lt;br /&gt;
 sed -i &amp;#039;8i\\\input{layout/hp-format}\n\\input{layout/hp-markup}\n&amp;#039; $target_file&lt;br /&gt;
&lt;br /&gt;
delete/&amp;quot;grep out&amp;quot; lines&lt;br /&gt;
 sed -i &amp;#039;/\\\input{layout\/hp-contents}/d&amp;#039; $target_file&lt;br /&gt;
&lt;br /&gt;
insert file into file at marker&lt;br /&gt;
 sed -i -e &amp;#039;/&amp;lt;style/r ebook/epub.css&amp;#039; $target_file&lt;br /&gt;
&lt;br /&gt;
 # -z changes the delimiter to null characters (\0) to allow for multiline matching&lt;br /&gt;
 sed -i -z &amp;#039;s/&amp;lt;\/header&amp;gt;.*&amp;lt; p &amp;gt;HARRY POTTER&amp;lt;\/p&amp;gt;/&amp;lt;\/header&amp;gt;\n&amp;lt; p &amp;gt;HARRY POTTER&amp;lt;\/p&amp;gt;/&amp;#039; $target_file&lt;br /&gt;
&lt;br /&gt;
===get filename dirname etc===&lt;br /&gt;
cd to parent dir&lt;br /&gt;
 script_dir=$(dirname $0)&lt;br /&gt;
 cd $script_dir/..&lt;br /&gt;
&lt;br /&gt;
 dirname file&lt;br /&gt;
 basename file&lt;br /&gt;
 &lt;br /&gt;
 myPath=data/de-districts/de-district_timeseries-02000.tsv&lt;br /&gt;
 myDir=$(dirname -- &amp;quot;$myPath&amp;quot;)&lt;br /&gt;
 myFileName=$(basename -- &amp;quot;$myPath&amp;quot;)&lt;br /&gt;
 myFileExt=&amp;quot;${myFileName##*.}&amp;quot;&lt;br /&gt;
 myFileName=&amp;quot;${myFileName%.*}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
filename without extension&lt;br /&gt;
 FILEOLD=&amp;quot;${FILE%.pdf}-alt.pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 for file in *&lt;br /&gt;
 do&lt;br /&gt;
   if [ -f $file ] ; then&lt;br /&gt;
     name=${file%\.*} # name without extension&lt;br /&gt;
     echo ${name}&lt;br /&gt;
   fi ;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 name=`basename /path/filename.ext .ext` # -&amp;gt; filename&lt;br /&gt;
 for i in *.jpeg; do mv &amp;quot;$i&amp;quot; &amp;quot;`basename &amp;quot;$i&amp;quot; .jpeg`.jpg&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
Path of current working dir&lt;br /&gt;
 dir=$PWD&lt;br /&gt;
&lt;br /&gt;
Name of current directory without path&lt;br /&gt;
 dirname=${PWD##*/}&lt;br /&gt;
&lt;br /&gt;
Location of this script&lt;br /&gt;
 dir=&amp;quot;$( cd &amp;quot;$( dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot; )&amp;quot; &amp;amp;&amp;amp; pwd )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Get Date as String===&lt;br /&gt;
 DATE=`date +&amp;quot;%y-%m-%d_%H-%M&amp;quot;`&lt;br /&gt;
 echo $DATE&lt;br /&gt;
&lt;br /&gt;
===Count Files in Folder===&lt;br /&gt;
 find . | wc -l&lt;br /&gt;
Check free inodes on partition&lt;br /&gt;
 df -i&lt;br /&gt;
&lt;br /&gt;
===Tar===&lt;br /&gt;
get rid of message &amp;quot;removing leading /&amp;quot;: use option P&lt;br /&gt;
&lt;br /&gt;
===Pause===&lt;br /&gt;
 read -p &amp;quot;Press any key to start backup...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===fstab mount discs harddrive partitions===&lt;br /&gt;
read UUID&lt;br /&gt;
 sudo blkid&lt;br /&gt;
 sudo blkid /dev/sda3&lt;br /&gt;
&lt;br /&gt;
UUID=D4AE21F4AE21D032 /media/win ntfs auto,user,uid=torben,gid=torben,fmask=0177,dmask=0077,ro 0 0&lt;br /&gt;
&lt;br /&gt;
UUID=f103902f-bbd6-49af-b983-b1dddedd361a /media/linux ext3 auto,user,rw 0 0&lt;br /&gt;
&lt;br /&gt;
UUID=EA06-C29C /media/files vfat auto,user,utf8,uid=torben,gid=torben,fmask=0177,dmask=0077,rw 0 0&lt;br /&gt;
&lt;br /&gt;
===Network Tests===&lt;br /&gt;
 ping 10.10.10.10 -c 1&lt;br /&gt;
 netcat / ncat / nc 10.10.10.10 8080&lt;br /&gt;
 telnet 10.10.10.10 8080&lt;br /&gt;
&lt;br /&gt;
====netcat====&lt;br /&gt;
Netcat is pretty cool, as it can be used to send messages between two machines, or even set files, see [https://www.digitalocean.com/community/tutorials/how-to-use-netcat-to-establish-and-test-tcp-and-udp-connections-on-a-vps]&lt;br /&gt;
&lt;br /&gt;
 # host1: start to listen on a port &lt;br /&gt;
 netcat -l &amp;lt;PORT&amp;gt;&lt;br /&gt;
 # host2: connect to host1&lt;br /&gt;
 netcat &amp;lt;IP-host1&amp;gt; &amp;lt;PORT&amp;gt;&lt;br /&gt;
 #  now messages can be send in both ways&lt;br /&gt;
Transfer file&lt;br /&gt;
 # host1: start to listen on a port &lt;br /&gt;
 netcat -l &amp;lt;PORT&amp;gt; &amp;gt; received_file&lt;br /&gt;
 # host2: send a file&lt;br /&gt;
 netcat &amp;lt;IP-host1&amp;gt; &amp;lt;PORT&amp;gt; &amp;lt; original_file&lt;br /&gt;
&lt;br /&gt;
====wget====&lt;br /&gt;
 wget --no-check-certificate https://192.168.0.123:8080&lt;br /&gt;
 wget --no-check-certificate --user=myUser --password=myPasswd https://10.10.10.10/url.xml&lt;br /&gt;
 # DynDNS&lt;br /&gt;
 wget -d -v &amp;quot;http://192.168.0.123:8080/nic/update?hostname=myhost.10.10.1.100&amp;amp;myip=10.10.10.12&amp;amp;localip=10.10.10.12&amp;quot; --user=&amp;quot;u123456&amp;quot; --password=&amp;quot;p123456&amp;quot; -O output.xml&lt;br /&gt;
 wget --ca-certificate=MyCert.pem --user=myUser --password=myPwd https://myUrl:80/file.xml&lt;br /&gt;
&lt;br /&gt;
====curl====&lt;br /&gt;
 curl --trace /dev/stdout \&lt;br /&gt;
  --cacert MyCert.pem \&lt;br /&gt;
  https://myUrl:80/file.xml \&lt;br /&gt;
  -u myUser:myPwd \&lt;br /&gt;
  --header &amp;quot;Content-Type: text/xml;charset=UTF-8&amp;quot; \&lt;br /&gt;
  --header &amp;quot;SOAPAction: http://MySoapActionURL&amp;quot; \&lt;br /&gt;
  --header &amp;quot;Accept-Encoding: gzip, deflate&amp;quot; \&lt;br /&gt;
  --data &amp;#039;&amp;lt;MySoapData&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Access Strava API and retrieve JSON format&lt;br /&gt;
 curl -X GET &amp;quot;https://www.strava.com/api/v3/athlete?access_token=1234567890&amp;quot; -H  &amp;quot;accept: application/json&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
Search for a word in some files (here *.txt)&lt;br /&gt;
 if [ -z $1 ]; then&lt;br /&gt;
   echo -n &amp;quot;Was? &amp;quot;&lt;br /&gt;
   read was&lt;br /&gt;
 else &lt;br /&gt;
   was=$1&lt;br /&gt;
   echo &amp;quot;$was&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 grep --color=auto -i $was *.txt&lt;br /&gt;
&lt;br /&gt;
===Crontab===&lt;br /&gt;
 # every 5 minutes&lt;br /&gt;
 */5     *       *       *       *       script1.sh&lt;br /&gt;
 # every 5 minutes + 1&lt;br /&gt;
 1-56/5  *       *       *       *       script2.sh&lt;br /&gt;
&lt;br /&gt;
===systemctl Services===&lt;br /&gt;
 # create service&lt;br /&gt;
 sudo vim /etc/systemd/system/mqtt_influx.service&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=My MQTT to InfluxDB Service&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/bin/env python3.9 /home/pi/influx-collectors/mqtt.py&lt;br /&gt;
 WorkingDirectory=/home/pi/influx-collectors&lt;br /&gt;
 Restart=always&lt;br /&gt;
 User=pi&lt;br /&gt;
 Group=pi&lt;br /&gt;
 Nice=10&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
 # activate and start service&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl enable mqtt_influx.service&lt;br /&gt;
 sudo systemctl start mqtt_influx.service&lt;br /&gt;
 sudo systemctl restart mqtt_influx.service&lt;br /&gt;
 sudo systemctl stop mqtt_influx.service&lt;br /&gt;
 sudo systemctl status mqtt_influx.service&lt;br /&gt;
 # access log (-f = follow)&lt;br /&gt;
 sudo journalctl -u mqtt_influx.service -f&lt;br /&gt;
&lt;br /&gt;
===Clean Harddisk by filling with Zeros===&lt;br /&gt;
Caution: double check which device you are cleaning...&lt;br /&gt;
 sudo dd if=/dev/zero of=/dev/sdd1 bs=1M&lt;br /&gt;
&lt;br /&gt;
===Screen===&lt;br /&gt;
 # liste anzeigen&lt;br /&gt;
 screen -list&lt;br /&gt;
 # neuen starten&lt;br /&gt;
 screen -R name&lt;br /&gt;
 # screen in Hintergrund&lt;br /&gt;
 STRG+a d -&amp;gt; detact screen&lt;br /&gt;
Screen Start Skript in new Screen&lt;br /&gt;
 screen -A -m -d -S myScrName ./start.sh&lt;br /&gt;
kill Screen Session&lt;br /&gt;
 STRG+d&lt;br /&gt;
kill Background Screen Session without entering&lt;br /&gt;
 screen -X -S myScrName quit&lt;br /&gt;
&lt;br /&gt;
===PID store and kill===&lt;br /&gt;
Set the name of the process &lt;br /&gt;
 bash -c &amp;quot;exec -a &amp;lt;MyName&amp;gt; &amp;lt;Command&amp;gt;&amp;quot;&lt;br /&gt;
kill the process by name&lt;br /&gt;
 pkill -f MyName&lt;br /&gt;
&lt;br /&gt;
get and store PID&lt;br /&gt;
 /home/user/bin/script.sh &amp;amp; echo $! &amp;gt; script.pid&lt;br /&gt;
kill process using PID&lt;br /&gt;
 kill $(cat script.pid)&lt;br /&gt;
&lt;br /&gt;
===Check if running as root/sudo===&lt;br /&gt;
 if [[ $EUID -ne 0 ]]; then&lt;br /&gt;
   echo &amp;quot;E: run via sudo!!!&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
check for username&lt;br /&gt;
 if [ `whoami` != &amp;#039;torben&amp;#039; ]&lt;br /&gt;
   then&lt;br /&gt;
     echo &amp;quot;You must be torben to do this.&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
===Add Group and User and Set Password===&lt;br /&gt;
 groupadd testuser&lt;br /&gt;
 useradd testuser -g testuser&lt;br /&gt;
 echo -e &amp;quot;testpass\ntestpass&amp;quot; | (passwd --stdin testuser)&lt;br /&gt;
&lt;br /&gt;
===Monitoring open files of a process===&lt;br /&gt;
 ## check system limit&lt;br /&gt;
 # ulimit -n &lt;br /&gt;
 DATE=`date +&amp;quot;%y-%m-%d_%H-%M&amp;quot;`&lt;br /&gt;
 ID=`pgrep -U username -f ProcessName`&lt;br /&gt;
 FILES=`ls -1 /proc/$ID/fd/ | wc -l` &lt;br /&gt;
 echo &amp;quot;$DATE  $FILES  &amp;quot;&amp;gt;&amp;gt; /home/user/logfile.log&lt;br /&gt;
 ## check process limit&lt;br /&gt;
 # cat /proc/$ID/limits&lt;br /&gt;
&lt;br /&gt;
===Backup Script for folder using tar and filters===&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 initialdir=$PWD&lt;br /&gt;
 DATE=`date +&amp;quot;%Y-%m-%d_%H-%M&amp;quot;`&lt;br /&gt;
 &lt;br /&gt;
 # cd to &amp;quot;path of this file /..&amp;quot;&lt;br /&gt;
 dir=&amp;quot;$( cd &amp;quot;$( dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot; )&amp;quot; &amp;amp;&amp;amp; pwd )&amp;quot;&lt;br /&gt;
 cd $dir/..&lt;br /&gt;
 # name of current folder = name to use for backup&lt;br /&gt;
 name=${PWD##*/}&lt;br /&gt;
 backupSource=$PWD&lt;br /&gt;
 &lt;br /&gt;
 cd $backupSource/../backup/&lt;br /&gt;
 zipDir=$(pwd)&lt;br /&gt;
 zipTarget=$zipDir/$name-$DATE.tgz&lt;br /&gt;
 &lt;br /&gt;
 cd $backupSource&lt;br /&gt;
 tar cfvz $zipTarget ./ --exclude=&amp;#039;logs/*&amp;#039; --exclude=&amp;#039;import/*&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 cd $initialdir&lt;br /&gt;
&lt;br /&gt;
===Zip dir including hidden files===&lt;br /&gt;
 zip -r9q myfile.zip . -x &amp;#039;.git/*&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Start Stop Script for Java Application===&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # Start and Stop Linux Service for Java application&lt;br /&gt;
 # uses java paramerter -Dname=$PROGRAM&lt;br /&gt;
 #      pgrep -f $PROGRAM &lt;br /&gt;
 #      pkill -f $PROGRAM&lt;br /&gt;
 # with $PROGRAM = Name of directory above location of this script: &lt;br /&gt;
 # /home/torben/Tool/bin/startscript.sh -&amp;gt; Tool&lt;br /&gt;
 # STDOUT and STDERR are written into ./logs/$PROGRAM-STDOUT.log&lt;br /&gt;
 &lt;br /&gt;
 # cd to &amp;quot;path of this file /..&amp;quot; to get dirname to use as service name&lt;br /&gt;
 dir=&amp;quot;$( cd &amp;quot;$( dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot; )&amp;quot; &amp;amp;&amp;amp; pwd )&amp;quot;&lt;br /&gt;
 cd $dir/..&lt;br /&gt;
 dirname=${PWD##*/}&lt;br /&gt;
 # Attention, name has to be unique on the system -&amp;gt; added -Service !!!&lt;br /&gt;
 PROGRAM=$dirname-Service&lt;br /&gt;
 &lt;br /&gt;
 # ensure that this script can only be started as user torben and not accidently as root&lt;br /&gt;
 username=torben &lt;br /&gt;
 &lt;br /&gt;
 jar=&amp;quot;./MyJavaApplication.jar&amp;quot;&lt;br /&gt;
 log_conf=&amp;quot;./config/log4j2.xml&amp;quot;&lt;br /&gt;
 app_params=&amp;quot;-conf ./config/config.xml&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 vm_params=&amp;quot; \&lt;br /&gt;
 -Dname=$PROGRAM \&lt;br /&gt;
 -Dlog4j.configurationFile=$log_conf \&lt;br /&gt;
 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector \&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 server_params=&amp;quot; \&lt;br /&gt;
 -server -Xms512m -Xmx2048m \&lt;br /&gt;
 -XX:+UseParallelGC \&lt;br /&gt;
 -XX:+AggressiveOpts \&lt;br /&gt;
 -XX:+UseFastAccessorMethods \&lt;br /&gt;
 -XX:-OmitStackTraceInFastThrow \&lt;br /&gt;
 -XX:+HeapDumpOnOutOfMemoryError \&lt;br /&gt;
 -XX:HeapDumpPath=./logs/rss-heap-$(date +%Y%m%d_%H%M%S).hprof \&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 # for remote jmx access (disabled by default)&lt;br /&gt;
 jmx_params=&amp;quot; \&lt;br /&gt;
 -Djava.rmi.server.hostname=172.19.13.200 \&lt;br /&gt;
 -Dcom.sun.management.jmxremote.port=1100 \&lt;br /&gt;
 -Dcom.sun.management.jmxremote.local.only=false \&lt;br /&gt;
 -Dcom.sun.management.jmxremote.authenticate=false \&lt;br /&gt;
 -Dcom.sun.management.jmxremote.ssl=false \&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 JAVAPROGRAM=&amp;quot;\&lt;br /&gt;
 $vm_params \&lt;br /&gt;
 -jar $jar $app_params \&lt;br /&gt;
 $server_params \&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # for remote jmx access add&lt;br /&gt;
 # $jmx_params &lt;br /&gt;
 &lt;br /&gt;
 # for problems with IPv6 add (i.e. if Startup takes more than 10 minute until first log entry)&lt;br /&gt;
 #-Djava.net.preferIPv4Stack=true&lt;br /&gt;
 #-Djava.net.preferIPv6Addresses=false&lt;br /&gt;
 &lt;br /&gt;
 # for Java debugging:&lt;br /&gt;
 # -Xverbose:codegen &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # do not modify below here #&lt;br /&gt;
 &lt;br /&gt;
 # Check user&lt;br /&gt;
 if [ `whoami` != $username ]&lt;br /&gt;
   then&lt;br /&gt;
     echo &amp;quot;ERROR: Only user $username is allowed to modify this service&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 # Functions&lt;br /&gt;
 check() {&lt;br /&gt;
    pgrep -U $username -f $PROGRAM &amp;gt;/dev/null&lt;br /&gt;
 }&lt;br /&gt;
 kill() {&lt;br /&gt;
    pkill -U $username -f $PROGRAM&lt;br /&gt;
 }&lt;br /&gt;
 stop() {&lt;br /&gt;
    check&lt;br /&gt;
    if [ $? -eq 0 ]; then&lt;br /&gt;
       kill &amp;gt;/dev/null&lt;br /&gt;
       # Make sure it is stopped before returning&lt;br /&gt;
       until [ $? -ne 0 ]; do&lt;br /&gt;
          sleep 1&lt;br /&gt;
          check&lt;br /&gt;
       done&lt;br /&gt;
       check&lt;br /&gt;
       if [ $? -eq 0 ]; then&lt;br /&gt;
          echo &amp;quot;ERROR stopping application $PROGRAM&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
       else&lt;br /&gt;
          echo &amp;quot;Application $PROGRAM stopped&amp;quot;&lt;br /&gt;
          #rm -f /var/lock/subsys/[init script name] &amp;lt;--- Perhaps, this lock file has to be removed, too.&lt;br /&gt;
       fi&lt;br /&gt;
    else&lt;br /&gt;
       echo &amp;quot;Application $PROGRAM is not running&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
 }&lt;br /&gt;
 start() {&lt;br /&gt;
    check&lt;br /&gt;
    if [ $? -eq 0 ]; then&lt;br /&gt;
       echo &amp;quot;Application $PROGRAM is already running&amp;quot;&lt;br /&gt;
       exit 0&lt;br /&gt;
    fi&lt;br /&gt;
    export LC_ALL=&amp;quot;de_DE@euro&amp;quot;;&lt;br /&gt;
    export LANG=german;&lt;br /&gt;
    nohup java $JAVAPROGRAM 0&amp;lt;&amp;amp;- &amp;amp;&amp;gt;./logs/$PROGRAM-STDOUT.log &amp;amp;&lt;br /&gt;
    echo &amp;quot;Application $PROGRAM started&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 restart() {&lt;br /&gt;
    stop&lt;br /&gt;
    start&lt;br /&gt;
 }&lt;br /&gt;
 status() {&lt;br /&gt;
    check&lt;br /&gt;
    if [ $? -eq 0 ]; then&lt;br /&gt;
       echo &amp;quot;Application $PROGRAM is running&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
       echo &amp;quot;Application $PROGRAM is stopped&amp;quot;&lt;br /&gt;
 	  exit 1&lt;br /&gt;
    fi&lt;br /&gt;
 }&lt;br /&gt;
 #Actions&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
 start)&lt;br /&gt;
    start&lt;br /&gt;
 ;;&lt;br /&gt;
 stop)&lt;br /&gt;
    stop&lt;br /&gt;
 ;;&lt;br /&gt;
 restart)&lt;br /&gt;
    restart&lt;br /&gt;
 ;;&lt;br /&gt;
 status)&lt;br /&gt;
    status&lt;br /&gt;
 ;;&lt;br /&gt;
 *)&lt;br /&gt;
    echo &amp;quot;Usage: $0 {start|stop|restart|status}&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
 esac&lt;br /&gt;
 exit 0&lt;/div&gt;</summary>
		<author><name>Torben</name></author>
	</entry>
</feed>