UNIX and Shell Programming

 

UNIX and Shell Programming

Practical (506)

(Basic and Important Scripts)

 

 

1) Shell script to calculates the gross salary. (HRA = 20% of basic salary, DA = 50% of basic salary)

 

clear

echo -e "Enter basic salary:\c"

read bs

hra=`expr $bs \* 20 / 100`

da=`expr $bs \* 50 / 100`

gross=`expr $bs + $hra + $da`

echo "Gross salary is $gross"

 

Output:

 

Enter basic salary : 9000

Gross salary is 15300

 

 

2) Shell Script to Generate Fibonacci Series

 

if [ $# -eq 1 ]

then

    num=$1

else

    echo -n "Enter a Number :"

    read num

fi

 

a=0

b=1

 

echo "The Fibonacci sequence for the number $num is : "

 

for (( i=0;i<=num;i++ ))

do

     echo -n "$a "

     f=$((a+b))

     a=$b

     b=$f

done

 

Output:

 

Enter a Number :8

The Fibonacci sequence for the number 8 is :

0 1 1 2 3 5 8 13 21       

 

 

3) Shell script to check whether the given number is prime or not.

 

clear

echo -e "Enter a number: \c"

read num

 

i=2

rem=1

 

if [ $num -lt $i ];

then

 echo -e "$num is not a prime number.\n"

 exit 0

fi

 

while [ $i -le `expr $num / 2` -a $rem -ne 0 ];

do

 rem=`expr $num % $i`

 i=`expr $i + 1`

done

 

if [ $rem -ne 0 ];

then

 echo -e "$num is a prime number.\n"

else

 echo -e "$num is not a prime number.\n"

fi

 

Output:

 

Enter a number: 17

17 is a prime number.

 

Enter a number: 10

10 is not a prime number.

 

 

4) Shell Script to Find Armstrong Numbers between a Range

 

echo -n "Enter the Lower Limit : "

read Start

echo -n "Enter the Upper Limit : "

read Ending

 

echo "Armstrong Numbers between $Start and $Ending are: "

 

while [ $Start -le $Ending ]

do

     Number=$Start

     Length=${#Number}

     Sum=0

     OldNumber=$Number

 

     while [ $Number -ne  0 ]

     do

          Rem=$((Number%10))

          Number=$((Number/10))

          Power=$(echo "$Rem ^ $Length" | bc )

          Sum=$((Sum+Power))

     done

 

     if [ $Sum -eq $OldNumber ]

     then

         echo -n "$OldNumber  "

     fi

 

     let Start++

done

 

Output:

 

Enter the Lower Limit : 100

Enter the Upper Limit : 400

Armstrong Numbers between 100 and 400 are: 153  370  371 407

 

 

 

5) Shell script to find the sum of digits of a number.

 

clear

echo -e "Enter number:\c"

read n

n1=$n

sum=0

r=0

while [ $n -gt 0 ]

do

    r=`expr $n % 10`

    sum=`expr $sum + $r`

    n=`expr $n / 10`

done

    echo -e "Sum of digits of number $n1 is $sum\n"

 

Output:

 

Enter number: 7890

Sum of digits of number 7890 is 24

 

 

6) Shell Script to find profit or loss given the Cost price and Selling price

 

clear

echo -e "Enter Cost Price:\c"

read cp

echo -e "Enter Selling Price:\c"

read sp

if [ $sp -eq $cp ];

then

  echo -e "\nNo profit or loss has incurred.\n"

elif [ $sp -lt $cp ];

then

  echo -e "\nLoss of Rs.`expr $cp - $sp` has incurred.\n"

else

  echo -e "\nProfit of Rs.`expr $sp - $cp` has incurred.\n"

fi

 

Output:

 

Enter Cost Price:1000

Enter Selling Price:1250

 

Profit of Rs.250 has incurred.

 

Enter Cost Price:300

Enter Selling Price:275

 

Loss of Rs.25 has incurred.

 

Enter Cost Price:280

Enter Selling Price:280

 

No profit or loss has incurred.

 

 

7) Shell script, which receives two filenames as arguments. It checks whether the two files contents are same or not. If they are same then second file is deleted.

 

if [ 2 –ne $# ];

then

echo “Usage: sh $0 filename1 filename2”

echo “For eg. sh $0 abc.txt xyz.txt”

if [ ! -e $1 ];

then

 echo -e " $1 does not exist!\n"

 exit 1

fi

if [ ! -e $2 ];

then

 echo -e " $2 does not exist!\n"

 exit 1

fi

 

if cmp $1 $2

then

  echo "Both file’s content are same."

  rm -f $2

  if [ $? -eq 0 ];

  then

    echo -e "File $2 deleted successfully.\n"

  else

    echo -e "Error deleting file $2. Please check whether it is a

             regular file or not.\n"

  fi

else

  echo -e "Files $1 and $2 are different.\n"

fi

 

Output:

 

$ sh filecmpdel.sh k.txt c.txt

 k.txt does not exist!

 

$ sh filecmpdel.sh a.txt c.txt

a.txt c.txt differ: char 4, line 1

Files a.txt and c.txt are different.

 

$ sh filecmpdel.sh a.txt b.txt

Both file’s content are same.

File b.txt deleted successfully.

 

 

8) Write a program to find the factorial value of any number.

 

clear

echo -e "Enter a number:\c"

read num

fact=1

n=$num

while [ $num -ge 1 ]

do

 

  fact=`expr $fact \* $num`

  num=`expr $num - 1`

 

done

echo -e "Factorial of $n is $fact\n"

 

Output:

 

Enter a number:7

Factorial of 7 is 5040

 

 

9) Menu driven Shell script that Lists current directory, Prints Working Directory, displays Date and displays Users logged in

 

clear

chk=y

while [ "$chk" = "y" ]

do

        echo -e "\nMENU:\n1. List Current Directory\n2. Date\n3.

                 Print Working Directory\n4. Users logged in

                 \nEnter your choice:\c"

        read choice

        case "$choice" in

                1) ls ;;

                2) date ;;

                3) pwd ;;

                4) who -Hu ;;

                *) echo "Invalid Choice"

        esac

        echo -e "\nDo you want to continue? Enter y to continue

                 or any other key to quit:"

        read chk

done

 

Output:

 

MENU:

1. List Current Directory

2. Date

3. Print Working Directory

4. Users logged in

Enter your choice:1

ap2.txt     cost.sh       f.txt         res

ap5.sh.txt  c.txt       google-chrome-stable_current_i386.deb  result

ap.sh.txt   Desktop       gross.sh         sdf

asd.sh     Documents       hui              Templates

a.sh     Downloads       makeshared        test2.sh

ass.txt      dsa.sh       menu.sh         test.sh

a.txt     examples.deb    Music         Videos

calc.sh     filecmp.sh       Pictures

chk.sh     file.sh       prime.sh

cobi.sh     fsct.sh       Public

 

Do you want to continue? Enter y to continue or any other key to quit:

y

 

MENU:

1. List Current Directory

2. Date

3. Print Working Directory

4. Users logged in

Enter your choice:2

Sun Oct  2 12:45:21 IST 2011

 

Do you want to continue? Enter y to continue or any other key to quit:

y

 

MENU:

1. List Current Directory

2. Date

3. Print Working Directory

4. Users logged in

Enter your choice:3

/home/akash

 

Do you want to continue? Enter y to continue or any other key to quit:

y

 

MENU:

1. List Current Directory

2. Date

3. Print Working Directory

4. Users logged in

Enter your choice:4

NAME     LINE         TIME             IDLE          PID COMMENT

akash    tty7         2011-10-02 09:12  old         1074 (:0)

akash    pts/1        2011-10-02 09:18   .          1491 (:0.0)

 

Do you want to continue? Enter y to continue or any other key to quit:

n

 

 

10) Shell script to check executable rights for all files in the current directory, if a file does not have the execute permission then make it executable.

 

 

clear

s=0

x=0

for file in *.*;

do

s=`expr $s + 1`

 if [ ! -x $file ];

 then

        if chmod u+x $file

        then

                echo "Added executable permission to $file"

                x=`expr $x + 1`

        else

                echo "Error adding executable permission to $file"    

        fi

 fi

done

echo -e "\nTotal number of files scanned: $s"

echo -e "Executable permission added to $x files.\n"

 

Output:

 

Added executable permission to examples.desktop

Added executable permission to google-chrome-stable_current_i386.deb

Added executable permission to menu.sh

Added executable permission to test2.sh

Added executable permission to test.sh

 

Total number of files scanned: 22

Executable permission added to 5 files.

 

 

11) Shell script for a simple calculator.

 

clear

echo "Enter number1:\c"

read n1

echo "Enter operator(+, -, /, *):\c"

read op

echo "Enter number2:\c"

read n2

if [ "$op" = "+" ];

then

 calc=`echo $n1 + $n2|bc`

 echo "\n$n1 + $n2 = $calc\n"

elif [ "$op" = "-" ];

then

 calc=`echo $n1 - $n2|bc`

 echo "\n$n1 - $n2 = $calc\n"

elif [ "$op" = "*" ];

then

 calc=`echo $n1 \* $n2|bc`

 echo "\n$n1 * $n2 = $calc\n"

elif [ "$op" = "/" ];

then

 calc=`echo $n1 / $n2|bc`

 echo "\n$n1 / $n2 = $calc\n"

else

  echo "Invalid operator!\n"

fi

 

Output:

 

Enter number1:100

Enter operator(+, -, /, *):+

Enter number2:50

 

100 + 50 = 150

 

Enter number1:90 

Enter operator(+, -, /, *):*

Enter number2:5

 

90 * 5 = 450

 

 

12) Shell program to generate all combinations of 1, 2, and 3

 

clear

for i in 1 2 3

do

  for j in 1 2 3

  do

    for k in 1 2 3

    do

      echo $i $j $k

    done

  done

done

 

Output:

 

1 1 1

1 1 2

1 1 3

1 2 1

1 2 2

1 2 3

1 3 1

1 3 2

1 3 3

2 1 1

2 1 2

2 1 3

2 2 1

2 2 2

2 2 3

2 3 1

2 3 2

2 3 3

3 1 1

3 1 2

3 1 3

3 2 1

3 2 2

3 2 3

3 3 1

3 3 2

3 3 3

13) Shell program for number sequence.

 

clear

if [ $# -ne 1 ];

then

n=4

else

n=$1

fi

a=1

i=1

while [ $i -le $n ]

do

 b=1

 while [ $b -le $i ]

 do

  echo "$a    \c"                                                                

  a=`expr $a + 1`

  b=`expr $b + 1`

 done

 echo "\n"

 i=`expr $i + 1`

done

 

Output:

 

1   

 

2    3

 

4    5    6

 

7    8    9    10

 

14) Decimal to Binary Conversion Shell Script

 

 

if [ $# -eq 0 ]

then

    echo "Argument(s) not supplied "

    echo "Usage: dec2binary.sh Decimal_number(s)"

else

 echo -e "\033[1mDECIMAL             \t\t BINARY\033[0m"

 

    while [ $# -ne 0 ]

    do

         DecNum=$1

         Binary=

         Number=$DecNum

 

         while [ $DecNum -ne 0 ]

         do

              Bit=$(expr $DecNum % 2)

              Binary=$Bit$Binary

              DecNum=$(expr $DecNum / 2)

         done

 

         echo -e "$Number              \t\t $Binary"

         shift

# Shifts command line arguments one step.Now $1 holds second argument

        unset Binary

   done

 

fi

 

Output:

 

sh dec2binary.sh 7 16 255 256 1023 1024

DECIMAL                          BINARY

7                                                111

16                                               10000

255                                            11111111

256                                            100000000

1023                                          1111111111

1024                                          10000000000

15) Shell Script to Check Whether a String is Palindrome or not

 

 

if [ $# -eq 0 ]

then

     echo -n "Enter a String: "

     read pstr

else

     pstr=$*

fi

 

# Remove all punctuations from input string and convert upper case to

# lower or lower case to upper.

 

String="$(echo $pstr | sed 's/[^[:alnum:]]//g' | \

tr '[:upper:]' '[:lower:]')"

 

Flag=0

 

# Find length of the string.

len=${#String}

 

#You can also calculate string length using bellow commands.

#len=`echo $str | wc -c`

#len=$((len-1))

 

#get the mid value up to which the comparison would be done.

mid=$((len/2))

 

for ((i=1;i<=mid;i++))

do

   c1=`echo $String|cut -c$i`           # extracts from beginning

   c2=`echo $String|cut -c$len`         # extracts from last

 

   if [ $c1 != $c2 ]

   then

        Flag=1

 

 

        break 2             # break N breaks out of N levels of loop.

   fi

 

   let len--

done

 

if [ $Flag -eq 0 ]

then

     echo "\"$pstr\" is a Palindrome"

else

     echo "\"$pstr\" is not a Palindrome"

fi

 

Output:

 

sh palindrome1.sh Akash Shastri

"Akash Shastri" is not a Palindrome

sh palindrome.sh Dammit, I\'m mad!

"Dammit, I'm mad!" is a Palindrome

sh palindrome1.sh

Enter a String: 11/02/2011

"11/02/2011" is a Palindrome

 

Comments