Difference between revisions of "Tutorial: A bit of Bash"

From dftwiki3
Jump to: navigation, search
(Alphabetically)
Line 117: Line 117:
  
 
  ls Desktop | sort
 
  ls Desktop | sort
 +
 +
===Numerically===
  
 
* to sort a list of numbers.   
 
* to sort a list of numbers.   

Revision as of 12:32, 26 November 2013

--D. Thiebaut (talk) 11:03, 26 November 2013 (EST)


A quick review of some useful Bash commands that can be used on the command line, or that can be included in bash scripts





Creating a bash script

  • first line should contain name of bash shell
#! /bin/bash
  • make the script executable
chmod +x scriptname


Variables

  • Declaration
file="hello.txt"
file=`ls -1 *.txt | head -1`     # get the first .txt file in the directory
  • In expressions: put a $ in front of it!
URL="http://cs.smith.edu/dftwiki/images/"
file="toto.png"
pathFile=$URL$file
file="alpha"
pathFile=$URL${file}.png      # add braces if string needs to be concatenated to variable

Script Parameters

  • assume doit.sh is a script and it is called as follows:
 doit.sh 8 2000 50
  • To get the arguments inside the script:
NP=$1    # will get 8
N=$2     # will get 2000
M=$3     # will get 50
  • To test if the number of parameters is 3 inside the script:
if [ "$#" -ne 3 ]; then
    echo "syntax: doit.sh NP N M"
    exit
fi

Displaying strings and various quantities

Getting the length of a string variable

name="toto.txt"
echo "length of $name = ${#name}"      #will output 8

Getting extension and name (without extension) of a file

fullPath="/usr/local/bin/toto.txt"
fileName="${fullPath##*/}"
echo "file name with extension = $fileName"

extension="${fullPath##*.}"
fileName="${fileName%.*}"

echo "fullPath = $fullPath"
echo "fileName without extension = $fileName"
echo "extension = $extension"

For Loops

  • loop from 1 to 10
for i in 1 2 3 4 5 6 7 8 9 10 ; do 
    echo $i
done
or
for i in {1..10} ; do 
    echo $i 
done
or
for i in {1..10} ; do echo $i; done
  • loop through strings
for file in toto.txt tata.txt tutu.txt titi.txt ; do
     echo $file
done
  • loop through all the files in a directory
dir="/enwiki/0/00"
for file in $dir/* ; do
    echo "$file"
done
or
dir="/enwiki/0/00"
for file in `ls -1 $dir` ; do
    echo $file
done

Sort lists

Alphabetically

  • to generate a sorted list of the files on the Desktop:
ls Desktop | sort

Numerically

  • to sort a list of numbers.
for i in 10 1 3 5 6 2 4 7 9 ; do echo $i ; done | sort -n
  • to remove replicated numbers
for i in 10 1 10 3 3 5 6 3 2 4 7 9 6 6 6 5 ; do echo $i ; done | sort -n | uniq