Changes

Jump to navigation Jump to search
6,864 bytes added ,  22:50, 29 March 2016
m
Text replacement - "</source>" to "</syntaxhighlight>"
Line 6: Line 6:  
# False
 
# False
 
# False
 
# False
# To executes for each value in a list use while loop.
   
# False
 
# False
 +
# False
 +
# True
 
# True
 
# True
# The PS3 reserved variable is used by select statement.
+
# True
# The default value for PS3 is set to #?.
+
 
 +
----
 +
 
 
* Write a menu driven script using the select statement to print calories for food items such as pizza, burger, Salad, Pasta etc.
 
* Write a menu driven script using the select statement to print calories for food items such as pizza, burger, Salad, Pasta etc.
 +
<syntaxhighlight lang="bash" ></syntaxhighlight>
 +
 +
----
 +
 
* Write a shell script that, given a file name as the argument will count vowels, blank spaces, characters, number of line and symbols.
 
* Write a shell script that, given a file name as the argument will count vowels, blank spaces, characters, number of line and symbols.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
file=$1
 +
v=0
 +
 +
if [ $# -ne 1 ]
 +
then
 +
echo "$0 fileName"
 +
exit 1
 +
fi
 +
if [ ! -f $file ]
 +
then
 +
echo "$file not a file"
 +
exit 2
 +
fi
 +
 +
while read -n 1 c
 +
do
 +
  l=$(echo $c | tr [:upper:] [:lower:])
 +
  [[ "$l" == "a" || "$l" == "e" || "$l" == "i" || "$l" == "o" || "$l" == "u" ]] && (( v++ ))
 +
done < $file
 +
 +
echo "Vowels : $v"
 +
echo "Characters : $(cat $file | wc -c)"
 +
echo "Blank lines : $(grep  -c '^$' $file)"
 +
echo "Lines : $(cat $file|wc -l )"</syntaxhighlight>
 +
----
 +
 
* Write a shell script that, given a file name as the argument will count English language articles such As 'A', 'An' and 'The'.
 
* Write a shell script that, given a file name as the argument will count English language articles such As 'A', 'An' and 'The'.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
file=$1
 +
a=0
 +
 +
if [ $# -ne 1 ]
 +
then
 +
echo "$0 fileName"
 +
exit 1
 +
fi
 +
if [ ! -f $file ]
 +
then
 +
echo "$file not a file"
 +
exit 2
 +
fi
 +
 +
while read line
 +
do
 +
  l=$(echo $line | tr [:upper:] [:lower:])
 +
 +
for word in $l
 +
do
 +
[[ $word == "a" || $word == "an" || $word == "the" ]] && ((a++))
 +
done
 +
 +
done < $file
 +
 +
echo "articles : $a"</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell script that, given a file name as the argument will write the even numbered line to a file with name evenfile and odd numbered lines in a text file called oddfile.
 
* Write a shell script that, given a file name as the argument will write the even numbered line to a file with name evenfile and odd numbered lines in a text file called oddfile.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
file=$1
 +
counter=0
 +
 +
if [ $# -ne 1 ]
 +
then
 +
echo "$0 fileName"
 +
exit 1
 +
fi
 +
if [ ! -f $file ]
 +
then
 +
echo "$file not a file"
 +
exit 2
 +
fi
 +
 +
while read line
 +
do
 +
((counter++))
 +
EvenNo=$(( counter%2 ))
 +
 +
if [ $EvenNo -eq 0 ]
 +
then
 +
echo $line >> evenfile
 +
else
 +
echo $line >> oddfile
 +
fi
 +
 +
done < $file</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell script to monitor Linux server disk space using a while loop. Send an email alert when percentage of used disk space is >= 90%.
 
* Write a shell script to monitor Linux server disk space using a while loop. Send an email alert when percentage of used disk space is >= 90%.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
ADMIN="me@somewher.com"
 +
# set alert level 90% is default
 +
ALERT=90
 +
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
 +
do
 +
  #echo $output
 +
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
 +
  partition=$(echo $output | awk '{ print $2 }' )
 +
  if [ $usep -ge $ALERT ]; then
 +
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
 +
    mail -s "Alert: Almost out of disk space $usep" $ADMIN
 +
  fi
 +
done</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell script to determine if an input number is a palindrome or not. A palindromic number is a number where the digits, with decimal representation usually assumed, are the same read backwards, for example, 58285.
 
* Write a shell script to determine if an input number is a palindrome or not. A palindromic number is a number where the digits, with decimal representation usually assumed, are the same read backwards, for example, 58285.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
echo -n "Enter number : "
 +
read n
 +
 +
# store single digit
 +
sd=0
 +
 +
# store number in reverse order
 +
rev=""
 +
 +
# store original number
 +
on=$n
 +
 +
while [ $n -gt 0 ]
 +
do
 +
    sd=$(( $n % 10 )) # get Remainder
 +
    n=$(( $n / 10 ))  # get next digit
 +
    # store previous number and current digit in reverse
 +
    rev=$( echo ${rev}${sd} )
 +
done
 +
 +
if [ $on -eq $rev ];
 +
then
 +
  echo "Number is palindrome"
 +
else
 +
  echo "Number is NOT palindrome"
 +
fi</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell program to read a number *such as 123) and find the sum of digits (1+2+3=6).
 
* Write a shell program to read a number *such as 123) and find the sum of digits (1+2+3=6).
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
 +
#store the no
 +
num=$1
 +
 +
#store the value of sum
 +
sum=0
 +
 +
if [ $# -ne 1 ]
 +
then
 +
echo "$0 number"
 +
exit 1
 +
fi
 +
 +
while [ $num -gt 0 ]
 +
do
 +
digit=$(( num%10 ))
 +
num=$(( num/10 ))
 +
sum=$(( digit+sum ))
 +
done
 +
 +
echo "Sum of digits = $sum"</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell program to read a number and display reverse the number. For example, 123 should be printed as as 321.
 
* Write a shell program to read a number and display reverse the number. For example, 123 should be printed as as 321.
* Write the shell program which produces a report from the output of ls -l in the following format using the for loop statement:
+
<syntaxhighlight lang="bash" >#!/bin/bash
 +
 
 +
#store the no
 +
num=$1
 +
 
 +
#store the reverse number
 +
rev=0
 +
 +
if [ $# -ne 1 ]
 +
then
 +
echo "$0 number"
 +
exit 1
 +
fi
 +
 
 +
while [ $num -gt 0 ]
 +
do
 +
digit=$(( num%10 ))
 +
num=$(( num/10 ))
 +
rev=$(( digit + rev*10 ))
 +
done
 +
 
 +
echo "Reverse of number = $rev"</syntaxhighlight>
 +
 
 +
----
 +
 
 +
* Write the shell program which produces a report from the output of ls -l in the following format:
 
<pre>file1
 
<pre>file1
 
file2
 
file2
Line 27: Line 219:  
Total symbolic links : 0
 
Total symbolic links : 0
 
Total size of regular files : 2940</pre>
 
Total size of regular files : 2940</pre>
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
 +
#copying the out of ls -l command to a file
 +
ls -l > /tmp/tmp.tmp
 +
 +
#initilizing values
 +
sum=0
 +
dir=0
 +
file=0
 +
link=0
 +
 +
#reading the file
 +
while read line
 +
do
 +
#getting the first character of each line to check the type of file
 +
read -n 1 c <<< $line
 +
 +
#checking if the file is a directory or not
 +
if [ $c == "d" ]
 +
then
 +
((dir++))
 +
echo "[DIR] ${line}/" | cut -d" " --fields="1 9" >> /tmp/dir.tmp
 +
 +
elif [ $c == "-" ] #true if the file is a regular file
 +
then
 +
((file++))
 +
echo $line | cut -d" " -f8 >> /tmp/file.tmp
 +
 +
elif [ $c == "l" ]  #true if the file is a symbolic link
 +
then
 +
((link++))
 +
fi
 +
 +
size=$( echo $line | cut -d" " -f5 ) #getting the size of the file
 +
sum=$(( sum+size )) #adding the size of all the files
 +
done < /tmp/tmp.tmp
 +
 +
cat /tmp/file.tmp #output the name of all the files
 +
cat /tmp/dir.tmp #output the name of all the directory
 +
 +
echo "Total regular files = $file"
 +
echo "Total directories = $dir"
 +
echo "Total symbolic links = $link"
 +
echo "Total size of regular file = $size"
 +
 +
#removing the temporary files
 +
rm /tmp/file.tmp
 +
rm /tmp/dir.tmp
 +
rm /tmp/tmp.tmp
 +
</syntaxhighlight>
 +
 +
----
 +
 
* Write a  shell script that will count the number of files in each of your sub-directories using the for loop.
 
* Write a  shell script that will count the number of files in each of your sub-directories using the for loop.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
 +
START=$HOME
 +
 +
# change your directory to command line if passed
 +
# otherwise use home directory
 +
[ $# -eq 1 ] && START=$1
 +
 +
if [ ! -d $START ]
 +
then
 +
echo "$START not a directory!"
 +
exit 1
 +
fi
 +
 +
# use find command to get all subdirs name in DIRS variable
 +
DIRS=$(find "$START" -type d)
 +
 +
# loop thought each dir to get the number of files in each of subdir
 +
for d in $DIRS
 +
do
 +
  [ "$d" != "." -a "$d" != ".." ] &&  echo "$d dirctory has $(ls -l $d | wc -l) files"
 +
done</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell script that accepts two directory names as arguments and deletes those files in the first directory which are similarly named in the second directory.
 
* Write a shell script that accepts two directory names as arguments and deletes those files in the first directory which are similarly named in the second directory.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
 +
SRC="$1"
 +
DST="$2"
 +
if [ $# -ne 2 ]
 +
then
 +
        echo "$(basename $0) dir1 dir2"
 +
        exit 1
 +
fi
 +
 +
if [ ! -d $SRC ]
 +
then
 +
        echo "Directory $SRC does not exists!"
 +
        exit 2
 +
fi
 +
 +
if [ ! -d $DST ]
 +
then
 +
        echo "Directory $DST does not exists!"
 +
        exit 2
 +
fi
 +
 +
for f in $DST/*
 +
do
 +
#echo Processing $f
 +
        if [ -f $f ]
 +
        then
 +
                tFile="$SRC/$(basename $f)"
 +
                if [ -f $tFile ]
 +
                then
 +
                        echo -n "Deleting $tFile..."
 +
                        /bin/rm $tFile
 +
                        [ $? -eq 0 ] && echo "done" || echo "failed"
 +
 +
                fi
 +
        fi
 +
done</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell script to search for no password entries in /etc/passwd  and lock all accounts.
 
* Write a shell script to search for no password entries in /etc/passwd  and lock all accounts.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
# Shell script for search for no password entries and lock all accounts
 +
# Set your email
 +
ADMINEMAIL="admin@somewhere.com"
 +
 +
### Do not change anything below ###
 +
#LOG File
 +
LOG="/root/nopassword.lock.log"
 +
STATUS=0
 +
TMPFILE="/tmp/null.mail.$$"
 +
 +
echo "-------------------------------------------------------" >>$LOG
 +
echo "Host: $(hostname),  Run date: $(date)" >> $LOG
 +
echo "-------------------------------------------------------" >>$LOG
 +
 +
# get all user names
 +
USERS="$(cut -d: -f 1 /etc/passwd)"
 +
 +
# display message
 +
echo "Searching for null password..."
 +
for u in $USERS
 +
do
 +
  # find out if password is set or not (null password)
 +
  passwd -S $u | grep -Ew "NP" >/dev/null
 +
  if [ $? -eq 0 ]; then # if so
 +
    echo "$u" >> $LOG
 +
    passwd -l $u #lock account
 +
    STATUS=1  #update status so that we can send an email
 +
  fi
 +
done
 +
echo "========================================================" >>$LOG
 +
if [ $STATUS -eq 1 ]; then
 +
  echo "Please see $LOG file and all account with no password are locked!" >$TMPFILE
 +
  echo "-- $(basename $0) script" >>$TMPFILE
 +
  mail -s "Account with no password found and locked" "$ADMINEMAIL" < $TMPFILE
 +
#  rm -f $TMPFILE
 +
fi</syntaxhighlight>
 +
 +
----
 +
 
* Write a shell program to read two numbers and display all the odd numbers between those two numbers.
 
* Write a shell program to read two numbers and display all the odd numbers between those two numbers.
 +
<syntaxhighlight lang="bash" >#!/bin/bash
 +
# Shell program to read two numbers and display all the odd
 +
 +
echo -n "Enter first number : "
 +
read n1
 +
 +
echo -n "Enter second number : "
 +
read n2
 +
 +
if [ $n2 -gt $n1 ];
 +
then
 +
  for(( i=$n1; i<=$n2; i++ ))
 +
  do
 +
    # see if it is odd or even number
 +
    test=$(( $i % 2 ))
 +
    if [ $test -ne 0 ];
 +
    then
 +
      echo $i
 +
    fi
 +
  done
 +
else
 +
  echo "$n2 must be greater than $n1, try again..."
 +
fi</syntaxhighlight>
 +
 +
----
    
[[Category:Control flow loop]][[Category:Commands]]
 
[[Category:Control flow loop]][[Category:Commands]]

Navigation menu