Difference between revisions of "Shell Scripting"

From rbachwiki
Jump to navigation Jump to search
(Created page with "== Shell Scripting == <pre> • Scripts must be chmod 755 so they can execute • #!/bin/bash (add to the top of the shell script so it can use the bash shell to interpret the script, you can also add python or other shell programs) • Positional Parameters: $0 ... $9 $@ to access all 0-9 // like in a loop • Exit Status return Codes: Range from 0 to 255: 0 = success: Other than 0 = error condition: use man or info to find meanign of exit status &bull, $? contain...")
 
Line 1: Line 1:
== Shell Scripting  ==
== Shell Scripting  ==


<pre>
• Scripts must be chmod 755 so they can execute


• #!/bin/bash (add to the top of the shell script so it can use the bash shell to interpret the script, you can also add python or other shell programs)
===Scripts must be chmod 755 so they can execute===
 
'''(add to the top of the shell script so it can use the bash shell to interpret the script, you can also add python or other shell programs)'''
#!/bin/bash


Positional Parameters: $0 ... $9 $@ to access all 0-9 // like in a loop
=== Positional Parameters:<code> $0 ... $9</code> $@ to access all 0-9 // like in a loop===


Exit Status return Codes: Range from 0 to 255: 0 = success: Other than 0 = error condition: use man or info to find meanign of exit status
===Exit Status return Codes: Range from 0 to 255: 0 = success: Other than 0 = error condition: use man or info to find meanign of exit status===


&bull, $? contains the return code of the previously executed command
===<code>&bull, $? </code> contains the return code of the previously executed command==


ls /not/here
ls /not/here
     echo "$?"
     echo "$?"
Another Code example
'''Another Code example'''


 
  HOST="google.com"
    HOST="google.com"
  ping -c 1 $HOST # -c 1 means it will send 1 ping
      ping -c 1 $HOST # -c 1 means it will send 1 ping
  if["$?" -eg "0"]
      if["$?" -eg "0"]
    then
      then
      echo "$HOST reachable"
          echo "$HOST reachable"
       else
       else
          "$HOST unreachable"
        "$HOST unreachable"
       fi
       fi
&& and ||
-the second statement only executes if the first one was successfull
mkdir /tmp/bak && cp test.txt /tmp/bak/
-the second statement will execute only if the first one fails
cp test.txt /tmp/bak/ || cp test.txt /tmp
• chain multiple commands together using a ; (semicolon) cp test.txt /tmp/ ; cp test.txt /bak


</pre>
&& and ||
 
'''the second statement only executes if the first one was successful'''
mkdir /tmp/bak && cp test.txt /tmp/bak/
 
'''the second statement will execute only if the first one fails'''
cp test.txt /tmp/bak/ || cp test.txt /tmp
===chain multiple commands together using a ; (semicolon) ===
cp test.txt /tmp/ ; cp test.txt /bak
 


===File Operators (test)===
===File Operators (test)===
Line 184: Line 187:


----
----
==[[#Shell Scripting|Back To Top]]-[[Main_Page| Home]] - [[Ubuntu_Tips|Category]]==
==[[#Shell Scripting|Back To Top]]-[[Main_Page| Home]] - [[Ubuntu_Tips|Category]]==

Revision as of 14:06, 30 June 2022

Shell Scripting

Scripts must be chmod 755 so they can execute

(add to the top of the shell script so it can use the bash shell to interpret the script, you can also add python or other shell programs)

#!/bin/bash 

Positional Parameters: $0 ... $9 $@ to access all 0-9 // like in a loop

Exit Status return Codes: Range from 0 to 255: 0 = success: Other than 0 = error condition: use man or info to find meanign of exit status

=&bull, $? contains the return code of the previously executed command

ls /not/here
   echo "$?"

Another Code example

 HOST="google.com"
 ping -c 1 $HOST # -c 1 means it will send 1 ping
 if["$?" -eg "0"]
   then
      echo "$HOST reachable"
     else
       "$HOST unreachable"
     fi
&& and ||

the second statement only executes if the first one was successful

mkdir /tmp/bak && cp test.txt /tmp/bak/

the second statement will execute only if the first one fails

cp test.txt /tmp/bak/ || cp test.txt /tmp

chain multiple commands together using a ; (semicolon)

cp test.txt /tmp/ ; cp test.txt /bak


File Operators (test)

-d FILE -true if is a directory
-e FILE True if file exists
-f FILE True if file exist and is a regular file
-r FILE True if file is readable by you
-s FILE True if file exists and is not empty
-w FILE True if file is writable by you
-x FILE True if file is executable by you
-z FILE True if string is empty
-n FILE True if string is not empty
String1=String2 true if strings are equal
String1 != string2 True if the strings are not equal
arg1 -eq arg2 equal
arg1 -ne arg2 not equal
arg1 -lt arg2 less than
arg1 -le arg2 less than or equal to
arg1 -gt arg2 greater than
arg1 -ge arg2 greater than or equal to
read -p "Prompt to dispaly" VarableName accepting user input

for loop to rename all jpg files with the date

  #!/bin/bash
  PICTURES=$(ls *.jpg)
  DATE=$ (date +%F)

  for PICTURES IN $PICTURES
      do
          echo "Renaming ${PICTURE} to ${DATE} - ${PICTURE}"
          mv $[PICTUE} ${DATE}-${PICTURE}
  done

  // Output
  renaming bear.jpg to 2015-03-06-bear.jpg

Adding exit commands to scripts

    #!/bin/bash
      HOST="google.com"
      ping -c 1 $HOST
      IF [ "$?" -ne"0" ]
      then
          echo "$HOST unrechale"
          exit 1
      fi
      exit 0

Creating a Function

function function-name() {# code goes here}
Calling a Function
function hello() {
    echo "hello:
    }
    hello (you don't need the () just call the name of the function)
    
** Positional Parameters and passing info to a funciton


    #!/bin/bash
  function hello(){
      echo "hello $1"

  }

  hello robert # robert is passed to the function hello
  #output is hello Robert
** Outputting miltple calls to a function


    #!/bin/bahs
      funciton hello() {
      for NAME in $@
      do
          echo "Hello $NAME"
      done
  }

  hello robert bob dan

  Output
  hello robert bob dan
Using Wildcards 
* -matches zero or more characters
*.txt
a*
a*.txt
? - matches exactly one character
?.txt
a?
a?.txt
[] character class - matches any of the characters included between the brackets. Matches exactly one character.
[aeiou]* exampld: ls -la [abge]*
ca[nt] matches:(it will match either the n or the t)
can, cat, candy, catch
[!] Matches any characters NOT included between the brackets. Matches exactly one character.
[!aeiou]* would match below bacause it does not start with any of those letters
baseball, cricket
Select a range
[a-g]* matches files that start with a,b,c,d,e,f,g
[3-6]* matches all files start with 3,4,5,6
Using predefined Character Classes
[[:alpha:]]
[[:alnum:]]
[[:digit:]]
[[:lower:]]
[[:upper:]]
[[:space:]]

#!/bin/bash
cd /var/www/bash
  # there's a space after the "if", space afer ! then a space after "[", space before "]"
if [ ! -d  /var/www/bash/text/ ]
then
     mkdir /var/www/bash/text
fi
for FILE in *.txt
do
     echo "Copying $FILE"
     cp $FILE /var/www/bash/text
done
Case Statements


Simple Backup bash shell script

#!/bin/bash
tar -czf myhome_directory.tar.gz /home/linuxconfig
 
Your backup script and variables:
#!/bin/bash
 OF=myhome_directory_$(date +%Y%m%d).tar.gz
 tar -czf $OF /home/linuxconfig 
 
We can use while loop to check if file does not exists. This script will sleep until file does exists. Note bash negator "!" which negates the -e option.
#!/bin/bash
 
while [ ! -e myfile ]; do
# Sleep until file does exists/is created
sleep 1
done 


Back To Top- Home - Category