• Welcome to Bashguru

    Linux is one of popular version of UNIX operating System. It is open source as its source code is freely available. It is free to use. Linux was designed considering UNIX compatibility. It's functionality list is quite similar to that of UNIX and become very popular over the last several years. Our Basic motive is to provide latest information about Linux Operating system.

  • Python Programming

    Python is a comparatively simple programming language, compared to c++. Although some of the benefits of c++ are abstracted away in python, they are replaced with an overall easier to learn language with many “intuitive” features. For this reason it is common and recommended by most professionals that people new to programming start with python.

  • Perl Programming

    Perl is an open-source, general-purpose interpreted programming language. Used often for CGI, Perl is also used for graphics programming, system administration, network programming, finance, bioinformatics, and other applications. The Perl languages borrow features from other programming languages including C, shell scripting (sh), AWK, and sed. They provide powerful text processing facilities without the arbitrary data-length limits of many contemporary UNIX command line tools, facilitating easy manipulation of text files.

  • Android

    Android is an operating system based on the Linux kernel, and designed primarily for touch screen mobile devices such as smart phones and tablet computers. Android is a Linux-based software system, and similar to Linux, is free and open source software. This means that other companies can use the Android operating developed by Google and use it in their mobile devices.Android gives you a world-class platform for creating apps and games for Android users everywhere, as well as an open marketplace for distributing to them instantly.

Saturday, June 21, 2008

Posted by venu k
10 comments | 12:44 AM

Bash variables are defaults to global

What makes a variable local?

  • A variable declared as local is one that is visible only within the block of code in which it appears. It has local "scope." In a function, a local variable has meaning only within that function block.
    local variable name

func ()
local loc_var=23
# Declared as local variable.
# Uses the 'local' builtin.
echo "\"loc_var\" in function = $loc_var"

# Not declared as local.
# Defaults to global.
echo "\"global_var\" in function = $global_var"

# Now, to see if local variable "loc_var" exists outside function.

echo "\"loc_var\" outside function = $loc_var"

# $loc_var outside function =
# No, $loc_var not visible globally

echo "\"global_var\" outside function = $global_var"

# $global_var outside function = 999
# $global_var is visible globally
exit 0
  • Before a function is called, all variables declared within the function are invisible outside the body of the function, not just those explicitly declared as local

func ()

# Visible only within the function block
# before the function has been called.


echo "global_var = $global_var"
# global_var =
# Function "func" has not yet been called,
# so $global_var is not visible here.


echo "global_var = $global_var"
# global_var = 37 Has been set by function call.

  • Using the declare builtin restricts the scope of a variable

foo ()

bar ()
echo $FOO

# Prints bar

However . . .

foo (){
declare FOO="bar"
bar ()
echo $FOO
# Prints nothing.
Posted by venu k
6 comments | 12:24 AM
Unlike many other programming languages, Bash does not separate its variables by "type". Essentially, Bash variables are character strings, but, depending on context, Bash permits integer operations and comparisons on variables. The determining factor is whether the value of a variable contains only digits.
Integer or string?
# Integer.
let "a += 1"
echo "a = $a "
# a = 2335
# Integer, still.

# Substitute "BB" for "23".
# This transforms $b into a string
echo "b = $b"
# b = BB35
declare -i b
# Declaring it an integer doesn't help.
echo "b = $b"
# b = BB35

let "b += 1"
# BB35 + 1 =
echo "b = $b"
# b = 1
echo "c = $c"
# c = BB34
# Substitute "23" for "BB".
# This makes $d an integer
echo "d = $d"
# d = 2334
let "d += 1"
# 2334 + 1 =
echo "d = $d"
# d = 2335
# What about null variables?
echo "e = $e"
# e =
let "e += 1"
# Arithmetic operations allowed on a null variable?
echo "e = $e"
# e = 1
# Null variable transformed into an integer.

# What about undeclared variables?
echo "f = $f"
# f =
let "f += 1"
# Arithmetic operations allowed?
echo "f = $f"
# f = 1
# Undeclared variable transformed into an integer.

The burden is on the programmer to keep track of what type the script variables are.
Bash will not do it for you.
But “declare” or “typeset “built-ins permit restring the properties of variables.
This is very weak form of the typing available in certain programming languages

declare –i number
# The script will treat subsequent occurrences of “number” as an integer
echo “Number = $number”
# Number = 3
echo “Number = $number”
#Number = 0
#Tries to evaluate the string “three” as an integer

Friday, June 6, 2008

Posted by venu k
9 comments | 7:56 AM

# backs up all files in current directory modified within last 24 hours
# in a tarred and zipped file
# Replace 1 with how many day's you want to back up files

BACKUPFILE=backup-`date +"%m-%d-%Y"`
# Embeds date in backup filename

#If no filename specified default to backup-MM-DD-YYYY

find . -mtime -1 -type f -print0 xargs -0 tar rvf "$archive.tar"

#check bellow command
# tar cvf - $(find . -mtime -1 -type f -print) > $archive.tar
# It works But will fail to backup file names contain space
# if there is no files containing spaces it is good

# ALSO USE bellow code but it is slow and not portable
# find . -mtime -1 -type f -exec tar rvf "$archive.tar" {} \;
# use rvf option instead of cvf otherwise only one file will be archived

gzip $archive.tar && echo "Directory $pwd backed up in \"$archive.tar.gz\" File"

Wednesday, June 4, 2008

Posted by venu k
12 comments | 6:11 AM
# Traverse a directory using depth first traversal technique
# Usage $0 directorypath
# otherwise it takes current working directory as directory path

#Do a small depth checking how deep into the tree we are
while [ $k -lt $1 ]
echo -n " "
let k++
#or use k=`expr $k + 1`

# Traverse a directory

ls "$1"while read i
depth $2
if [ -d "$1/$i" ]
echo Directory: $1/$i
traverse "$1/$i" `expr $2 + 1`
# Calling this as a subshell means that when the called
# function changes directory, it will not affect our
# current working directory
# If you call this in current shell it gives the error
# bash: traverse: No such file or directory after changing
# the current directory

echo File: $1/$i

# $1 is directory path

if [ -z "$1" ]
# Here we are giving '0' is the current depth of direcory
traverse . 0
traverse $1 0