Shell script explanation


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell script explanation
# 1  
Old 02-01-2018
Shell script explanation

Hey,
can someone explain me this script?

Code:
i=0
while read WORT
do
 echo $WORT|grep a>/dev/null || echo$WORT|grep B>dev/null || let i=$i+1
done
echo $i

The first lane initializie the variable i with the value of 0.
The loop line has 3 different options because of ||. The only option I understand
is that i gets +1 everytime if the other two options dont apply.

Last line just gives out the value i after the while loop is done.

I dont understand this line "echo $WORT|grep a>/dev/null || echo$WORT|grep B>dev/null "

Last edited by Don Cragun; 02-01-2018 at 06:37 PM.. Reason: Add ICODE tags.
# 2  
Old 02-01-2018
The script tries to count how many times the input does not contain the letter a then does not contain the letter B. The while loop does not stop though. The second grep should direct to /dev/null (the slash is missing). There should also be a space after echo. A slight change could be:
Code:
i=0

WORT=0

while read WORT && [ -n "$WORT" ]
do
     echo $WORT|grep a>/dev/null || echo $WORT|grep B>/dev/null || let i=$i+1
done

echo $i

The read loop will stop with an empty input.

Last edited by rdrtx1; 02-01-2018 at 06:32 PM..
# 3  
Old 02-01-2018
I still dont actually understand it. In my solution I have like 15 files
Abbe, Ananas, Apfel, Apfelsine, Asterix, Backen, Berg, Burg, Hacken, Halle,
Huepfen, Obelix, Schuber, Werbung, Barbier

to use this script it would be ls | /home/notroot/scripts/myscript.sh

Code:
16 times "read Wort"   
15 times "echo $WORT|grep a>/dev/null
10 times echo $WORT|grep B>/dev/null
8 Timeslet i=$i+1
1 time echo$i

Can you tell me why would it count like 15 times for a or 10 tims for B?
Moderator's Comments:
Mod Comment Please use CODE tags (not ICODE tags) when displaying full-line and multi-line code segments, sample input, and sample output. Use ICODE tags when displaying partial-line code segments, sample input, and sample output.

Last edited by Don Cragun; 02-01-2018 at 06:46 PM.. Reason: Change ICODE tags to CODE tags; add ICODE tags.
# 4  
Old 02-01-2018
8 Times let i=$i+1 is correct. On the list of file names evaluated there are 8 file names that do not have both the letters a and B.
# 5  
Old 02-01-2018
Quote:
Originally Posted by rdrtx1
The read loop will stop with an empty input.
Yes, but this might lead to incorrect results. Consider this input:

Code:
line a
line B

another line

The while loop would terminate at line 3, no?

Furthermore:

Code:
WORT=0

does not make sense with a variable which is supposed to take string values afterwards.

Code:
WORT=""

or, depending on the shell used, one of these:

Code:
local WORT=""
typeset WORT=""
declare WORT=""

would make more sense.

I hope this helps.

bakunin
# 6  
Old 02-01-2018
What is it that you don't understand?

Is it the echo $WORT|grep a>/dev/null you don't understand or is it that you don't understand what || does as a command separator?
# 7  
Old 02-01-2018
It might be ||

With the explanation from earlier I get that grep a>/dev/null does count if the file contains the letter a right?
Is the reason for 15 times because its the first instruction if yes then I guess I understand this part. But what is with B?

Last edited by rbatte1; 02-02-2018 at 05:42 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

What does this shell script do? Need in depth explanation please

Hi My friend wrote this particular script and won't tell me what it does, and when I run it I don't understand it. What does the entire script do with specifics please. Thanks Bob #!/bin/bash current=0 while ; do if ; then echo ${current} current=$((${current}+1)) fi done (1 Reply)
Discussion started by: shadowknight777
1 Replies

2. Solaris

Explanation of script

Hello Guys, can someone help explain the script below for me? I will really appreciate it. vi db_script #!/bin/sh echo .cron job run on.`date`> cronjob.txt df -h >> cronjob.txt echo welcome to home (2 Replies)
Discussion started by: cjashu
2 Replies

3. Shell Programming and Scripting

need an explanation on this script...

The following script will create a directory in a directory and will go on as many times as the number you will give in. I am trying to find out how it works ... can someone please help me with that? #!/bin/sh #create a variable and set it to 1 n=1 #start a loop as... (3 Replies)
Discussion started by: I-1
3 Replies

4. Shell Programming and Scripting

Script explanation

#script fileused=test.txt hostname=test.dis.com ftp $hostname <<-! > $fileused.err 2>&1 put file.txt /usr/text.txt bye ! kindly the above script the one marked as Bold and underlined as the above i am declaring the new variable as filename ,But when i used i had used as $fileused.err... (1 Reply)
Discussion started by: rajar_r
1 Replies

5. Shell Programming and Scripting

Shell Script Explanation

Hello, I have seen this script on this site. I understand most of it. However I am a bit stuck on the part in red. It appears to be expanding for file in *.zip do zipdir=${file%.*} mkdir $zipdir || echo "unable to create $zipdir" cp $file $zipdir || echo "unable to copy $file"... (3 Replies)
Discussion started by: jaysunn
3 Replies

6. Shell Programming and Scripting

explanation for a script

Guys, was wondering what the meaning of the below bit is ? awk -F ' ' '{print $1 " " $2 ;}' $TEMPFILE | (rm -f $TEMPFILE; sed 's/$/ '"$box"'/g' > $TEMPFILE) Can anyone explain this in detail? what is the significance of rm -f $TEMPFILE here? What all IO/buffering happens here ?How the... (0 Replies)
Discussion started by: hashin_p
0 Replies

7. Shell Programming and Scripting

Need explanation of script

Hi All, Can anybody explain what this script is doing? #!/bin/sh who | cut -d " " -f1 | sort -u > userlist1 while true ; do sleep 60 who | cut -d" " -f1 | sort -u >userlist2 for username in `cat userlist1` ; do if ! grep "^$username$" userlist2 > /dev/null ; then echo... (0 Replies)
Discussion started by: vishalpatel03
0 Replies

8. Shell Programming and Scripting

Explanation of running this script

I have a script that has defined a log file like this. The name of the script is verify.sh Inside the script there is some thing like this. LOG=/usr/verify TDATE=`date "+%m%d%y"$$` LOGFILE=$LOG.$TDATE. and inside the script it has been written as echo "This is to verify" | tee -a... (2 Replies)
Discussion started by: sendhilmani
2 Replies

9. Shell Programming and Scripting

Script explanation

I have the following script awk '$1 ~ /^*+/ { s += $NF; m++ } END { print NR, m, s } and I use it to get results from the following file A4792 4 COMP9021 5 K9 7 ABC 8 924 1 R2D2 3 (8 Replies)
Discussion started by: sickboy
8 Replies

10. Shell Programming and Scripting

any explanation for thsi shell script behaviour

hello whats the difference between excuting a shell script as a)sh myscript.sh b). ./myscript.sh i noticed that my shell script works fine when i run it as . ./myscript .sh but fails when i run it as sh myscript.sh could anybody explain why. the shell script is very simple ... (9 Replies)
Discussion started by: xiamin
9 Replies
Login or Register to Ask a Question