..ummm, may i ask the significance of having "" ..???
Always keep in mind that the shell "expands" variables before evaluating a line. That means that an expression like "$var" will be replaced by the contents of this variable. The default content of a variable is the null string, now. Consider the following code:
Code:
x="foo"
if [ $x = foo ] ; then
...
The shell will do the following: it will first replace "$x" with "foo" and only then evaluate the line:
Code:
if [ foo = foo ] ; then
Of course this evaluates to "TRUE" and the if-branch will be executed (the else-branch in case it evaluates to "FALSE"). Now suppose that "$x" is not given a value:
Code:
# this commented so that it has no effect: # x="foo"
if [ $x = foo ] ; then
...
The shell would evaluate the line in question to:
Code:
if [ = foo ] ; then
and this is simply a syntactical error. The comparison lacks a part to which to compare to. Now consider the same with quotes:
Code:
x=foo
if [ "$x" = "foo" ] ; then
...
gives:
Code:
if [ "foo" = "foo" ] ; then
and
Code:
# this commented out # x=foo
if [ "$x" = "foo" ] ; then
...
gives
Code:
if [ "" = "foo" ] ; then
Which will now be "FALSE", but still be syntactically correct.
This is why it is good to ALWAYS quote your variables.
Hi,
In the process of modification of my script, the step next problem is following, I Would like to incorporate the following changes..but does not seem to work !
I am not sure where to define the PATHNAME variable..??? I tried several options, did not work.
Sorry for bothering so much, its kind of first script that I am writing..:P
Code:
PATH525[1]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav1/"
PATH525[2]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav4/"
PATHZY[1]="/eos/uscms/store/user/pooja04//analysis2012/533/mc/zgammav1/"
PATH533[1]="/eos/uscms/store/user/pooja04//analysis2012/533/data/datav14/"
CopyFiles() {
if [ "$2" = "525" ]; then
$PATHNAME = "$PATH525"
elif [ "$2" = "533" ]; then
$PATHNAME = "$PATH533"
elif [ "$2" = "ZY" ]; then
$PATHNAME = "$PATHZY"
fi
echo "pathname is $PATHNAME"
for FileNameIndx in "${PATHNAME[@]}"
do
if [[ ! -e "dest_path/$FileNameIndx" ]]; then
ls -ltr "$FileNameIndx" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$FileNameIndx" >> "$FileName"
echo "$FileNameIndx is copied"
else
echo "Check the FileName in ${PATHNAME[@]}"
fi
done
}
thanks
---------- Post updated at 01:00 PM ---------- Previous update was at 12:54 PM ----------
Thanks for the detailed information..:-)
Quote:
Originally Posted by bakunin
Always keep in mind that the shell "expands" variables before evaluating a line. That means that an expression like "$var" will be replaced by the contents of this variable. The default content of a variable is the null string, now. Consider the following code:
Code:
x="foo"
if [ $x = foo ] ; then
...
The shell will do the following: it will first replace "$x" with "foo" and only then evaluate the line:
Code:
if [ foo = foo ] ; then
Of course this evaluates to "TRUE" and the if-branch will be executed (the else-branch in case it evaluates to "FALSE"). Now suppose that "$x" is not given a value:
Code:
# this commented so that it has no effect: # x="foo"
if [ $x = foo ] ; then
...
The shell would evaluate the line in question to:
Code:
if [ = foo ] ; then
and this is simply a syntactical error. The comparison lacks a part to which to compare to. Now consider the same with quotes:
Code:
x=foo
if [ "$x" = "foo" ] ; then
...
gives:
Code:
if [ "foo" = "foo" ] ; then
and
Code:
# this commented out # x=foo
if [ "$x" = "foo" ] ; then
...
gives
Code:
if [ "" = "foo" ] ; then
Which will now be "FALSE", but still be syntactically correct.
This is why it is good to ALWAYS quote your variables.
---------- Post updated at 11:32 PM ---------- Previous update was at 11:31 PM ----------
Quote:
Originally Posted by nrjrasaxena
Hi,
In the process of modification of my script, the step next problem is following, I Would like to incorporate the following changes..but does not seem to work !
I am not sure where to define the PATHNAME variable..??? I tried several options, did not work.
Sorry for bothering so much, its kind of first script that I am writing..:P
Code:
PATH525[1]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav1/"
PATH525[2]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav4/"
PATHZY[1]="/eos/uscms/store/user/pooja04//analysis2012/533/mc/zgammav1/"
PATH533[1]="/eos/uscms/store/user/pooja04//analysis2012/533/data/datav14/"
CopyFiles() {
if [ "$2" = "525" ]; then
$PATHNAME = "$PATH525"
elif [ "$2" = "533" ]; then
$PATHNAME = "$PATH533"
elif [ "$2" = "ZY" ]; then
$PATHNAME = "$PATHZY"
fi
echo "pathname is $PATHNAME"
for FileNameIndx in "${PATHNAME[@]}"
do
if [[ ! -e "dest_path/$FileNameIndx" ]]; then
ls -ltr "$FileNameIndx" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$FileNameIndx" >> "$FileName"
echo "$FileNameIndx is copied"
else
echo "Check the FileName in ${PATHNAME[@]}"
fi
done
}
thanks
---------- Post updated at 01:00 PM ---------- Previous update was at 12:54 PM ----------
Declare variable in function thats fine just make sure before using thats variable you should assign value to it
and in above code you are doing
Code:
$A=$b # this will not assign value to A.
#just do like this.
A=$b
hope this helps you
How about this..??
Code:
CopyFiles() {
PATHNAME="$paths"
if [ "$2" = "525" ]; then
PATHNAME="$PATH525"
elif [ "$2" = "533" ]; then
PATHNAME="$PATH533"
elif [ "$2" = "ZY" ]; then
PATHNAME="$PATHZY"
fi
echo "pathname is $PATHNAME"
for FileNameIndx in "${PATHNAME[@]}"
do
if [[ ! -e "dest_path/$FileNameIndx" ]]; then
ls -ltr "$FileNameIndx" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$FileNameIndx" >> "$FileName"
echo "$FileNameIndx is copied"
else
echo "Check the FileName in ${PATHNAME[@]}"
fi
done
}
Not Working...!! The echo command not showing the value of the PATHNAME variable.
Last edited by nrjrasaxena; 09-04-2012 at 03:25 PM..
I am trying to pass a second argument like so:
if ] then
export ARG2=$2
else
message "Second argument not specified: USAGE - $PROGRAM_NAME ARG1 ARG2"
checkerror -e 2 -m "Please specify if it is a history or weekly (H or W) extract in the 2nd argument"
fi
however, it always goes... (4 Replies)
Earlier I had one structure C
typedef struct c
{
int cc;
}CS;
I used to call a library function say int GetData(CS *x) which was returning me the above structure C with data.
GetData(CS *x)
Function call used to be like:
CS CSobj;
GetData(&CSObj);
Now there are two... (12 Replies)
How to pass the alphabet character as a argument in case and in if block?
ex:
c=$1
if a-z ]]
then
echo "alphabet"
case $1 in
a-z) echo "the value is a alphabet"
edit by bakunin: please use CODE-tags. We REALLY mean it. (9 Replies)
Hi,
I have a script that is scheduled with cron and runs every night. The cron part looks like this:
00 20 * * 0,1,2,3,4,5,6 /usr/local/bin/BACKUP TBTARM HOT DELETE
My issue is with the 3rd parameter. Somewhere in the script, i want to tell the script to delete some files if the 3rd... (7 Replies)
I have the following code :
function1 ()
{
print "January"
}
function2()
{
case $1 in
January)
print "Dzisiaj mamy styczen"
;;
*)
;;
}
main()
{ (1 Reply)
Hi,
I have 2 ksh scripts.
Script1.ksh contains function definition.
script1.ksh
function f1() {
while getopts a:c: args
do
case $args in
a) ARG1=$OPTARG ;;
c) ARG2=$OPTARG ;;
\?) echo "Error no valid Arguments passed"
esac
done
echo $ARG1
echo $ARG2
script2.sh (2 Replies)
Hi All,
i have script like below..
echo "1) first option"
echo ""
echo "2) second option"
echo ""
echo "*) please enter the correct option"
read select
case $select in
1) echo "first option selected"
;;
2) echo "second option selected"
;;
*) echo "please enter the correct... (4 Replies)
Hi ,
I have three funcions f1, f2 and f3 .
f1 calls f2 and f2 calls f3 .
I have a global variable "period" which i want to pass to f3 .
Can i pass the variable directly in the definition of f3 ?
Pls help .
sars (4 Replies)
Hi All,
Calling a function with one argument and storing the return value in a shell script is as below:( so far I know)
value="`fun_1 "argument1"`"
Its working perfectly for me.
Can u help me with passing more than one argument and storing the return value
Thnaks in advance
JS (1 Reply)
May i know how to pass an argument to a function in a shell script?
Sorry, i din stated that it is in a shell script in my previous post.
Means: checkStatus() {
...........
}
read status;
I wanna use the status in the function checkstatus, how... (2 Replies)