Sponsored Content
Top Forums UNIX for Dummies Questions & Answers combine 2 lines (command & echo) Post 8067 by LivinFree on Friday 5th of October 2001 03:58:51 AM
Old 10-05-2001
Hey, no problem! I'll add lots and lots of comments, so you can "read along" with the code...

Code:
#!/bin/sh
# The first thing I usually do in a script is define "functions"
# A function (like the one below) takes the form of
# function_name () {
# The Commands You Want Inside
# }
# Then you can just call the function_name to execute it!
# I like functions, even short ones like this, because
# it makes my "if" statements small and easy to read...
use_msg () {
echo "Usage:  `basename $0` [name]"
}
# Below is some very basic sanity checking.
# Basically, what it says, is "if there isn't exactly one argument,
# print the use_msg, then exit with errors"
# the "$#" operator counts the number of arguments. "-ne"
# Stands for "not equal".
if [ "$#" -ne "1" ] ; then
        use_msg
        exit 2
fi
# Okay, so we made it this far, lets try to extract the real name
# from the passwd file. So we're searching passwd for a
# line beginning with (^) the user id (${1}). I put curly
# braces around some of my variables to help myself keep
# it seperate from the rest. You probably don't even really need
# it here. Also, make sure you are using backticks instead of
# single quotes! The backtick key is usually found near the top
# left of your keyboard, under the Esc key
name_t=`grep ^${1} /etc/passwd | cut -d: -f5 | cut -d, -f1`
#OK, if we can't extract the real name of the user, the variable
# $name_t will be empty. If that's the case, lets use the UserID
# instead. Otherwise, use the name. It'll make the script look
# nicer later on
if [ "$name_t" = "" ] ; then
        name="$1"
else
        name="$name_t"
fi
# Here's your trick to see if the user exists:
who | grep $1 >/dev/null 2>&1
# Now watch what we're doing with the "logg" variable. If the
# user above command is successful ( exited with 0 status),
# then make the "logg" var empty. If the command did not 
# succeed (e.g. the user isn't logged in), then make logg equal
# to "not ". The space on the end is important, once again to
# make the output readable. Try it without the space, and
# see what happens.
if [ "$?" = "0" ] ; then
        logg=""
else
        logg="not "
fi
# Alrighty! This is the fruits of your labor! You echo out the
# name, which we defined above (it'll either be the full name,
# or the usedid you gave it on the command line, remember?),
# then you'll see what happens with the logg var. Remember,
# since it's empty when the user is logged it, the string will say
# "is logged in". If the user is not logged in, it will insert
# "not", then a space to say "is not logged in". The curly braces
# are needed right here to keep $logg from looking like
# $logglogged, which the shell will not understand.
echo "${name} is ${logg}logged in"

Seriously though - the best experience is to run this script, then make some changes, to "get a feel" for how the different items interact. So experiment, play, improve, and have fun!

Please don't hesitate to post back with any other questions. It may make sense to me, but not to you. Or vice-versa.
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Combine two lines

Hi I have a file with the records 1 A B C D 2 E F G H 3 I J K L 4 M N O P In the ouput I want 1 A B C D 2 # F G H 3 I J K L 4 M N O P How to achieve this? (10 Replies)
Discussion started by: superprg
10 Replies

2. What is on Your Mind?

[[ $(date +%Y) == 2007 ]] && echo "Happy New Year"

Same as the Title! :) (2 Replies)
Discussion started by: ripat
2 Replies

3. Shell Programming and Scripting

combine 2 lines

Moderator, kindly delete this thread because I already found what I needed... thanks. (0 Replies)
Discussion started by: Deanne
0 Replies

4. Shell Programming and Scripting

combine two perl lines into a single perl command

Hi Everyone, i have a string 00:44:40 so: $tmp=~ s/://gi; $tmp=~s/({2})({2})({2})/$1*3600+$2*60+$3/e; the output is 2680. Any way to combine this two lines into a single line? Thanks (4 Replies)
Discussion started by: jimmy_y
4 Replies

5. Shell Programming and Scripting

Append && echo "success" to all commands

I am learning to build from SVN and other tools, with a lot of copying and pasting from forums. I like to append && echo "success" to all commands so that I can see at a glance if things went all right. Is there a way that I can have the bash shell append this to all commands? Thanks! (5 Replies)
Discussion started by: dotancohen
5 Replies

6. Shell Programming and Scripting

Perl: combine Backtick & system() I/O operation?

Hi - Within perl I want to execute a system command. I want to re-direct all the output from the command to a file (@result = `$cmd`;), but I ALSO want the results to be displayed on the screen (system("$cmd"); The reason is this - if the command completes, I want to process the output. If the... (6 Replies)
Discussion started by: jeffw_00
6 Replies

7. Shell Programming and Scripting

How to combine lines?

Hi, I have a file like this: "sdfc@abc.com","arovls","some addr ", "more stuff" "ssss@email.com","arovls","some addr", "sss" "edx@email.com","arovls","some addr", "sssdfvv" "ssss@a55.com","arovls","some addr", "lsdsdgf" "ssss@0234.com","aro vls","123 Main", "lSdfv" I want to... (4 Replies)
Discussion started by: erniel
4 Replies

8. Shell Programming and Scripting

How to combine 2 files and output the unique & difference?

Hi Guys, I have two input files and I want to combine them and get the unique values and differences and put them into one file. See below desired output file. Inputfile1: 1111111 2222222 3333333 7860068 7860069 7860071 7860072 Inputfile2: 4444444 (4 Replies)
Discussion started by: pinpe
4 Replies

9. Shell Programming and Scripting

awk to combine lines if fields match in lines

In the awk below, what I am attempting to do is check each line in the tab-delimeted input, which has ~20 lines in it, for a keyword SVTYPE=Fusion. If the keyword is found I am splitting $3 using the . (dot) and reading the portion before and after the dot in an array a. If it does have that... (12 Replies)
Discussion started by: cmccabe
12 Replies

10. Shell Programming and Scripting

awk to remove lines that do not start with digit and combine line or lines

I have been searching and trying to come up with an awk that will perform the following on a converted text file (original is a pdf). 1. Since the first two lines are (begin with) text they are removed 2. if $1 is a number then all text is merged (combined) into one line until the next... (3 Replies)
Discussion started by: cmccabe
3 Replies
paste(1)						      General Commands Manual							  paste(1)

Name
       paste - merge file data

Syntax
       paste file1 file2...
       paste -dlist file1 file2...
       paste -s [-dlist] file1 file2...

Description
       In  the	first  two forms, concatenates corresponding lines of the given input files file1, file2, etc.	It treats each file as a column or
       columns of a table and pastes them together horizontally (parallel merging).

       In the last form, the command combines subsequent lines of the input file (serial merging).

       In all cases, lines are glued together with the tab character, or with characters from an optionally specified  list.   Output  is  to  the
       standard output, so it can be used as the start of a pipe, or as a filter, if - is used in place of a file name.

Options
       -       Used in place of any file name, to read a line from the standard input.	(There is no prompting).

       -dlist  Replaces  characters  of  all but last file with nontabs characters (default tab).  One or more characters immediately following -d
	       replace the default tab as the line concatenation character.  The list is used circularly, i. e. when exhausted, it is reused.	In
	       parallel  merging  (i. e. no -s option), the lines from the last file are always terminated with a new-line character, not from the
	       list.  The list may contain the special escape sequences: 
 (new-line), 	 (tab), \ (backslash), and  (empty string, not a null
	       character).   Quoting  may  be  necessary,  if characters have special meaning to the shell (for example, to get one backslash, use
	       -d"\\" ).
	       Without this option, the new-line characters of each but the last file (or last line in case of the -s option) are  replaced  by  a
	       tab character.  This option allows replacing the tab character by one or more alternate characters (see below).

       -s      Merges  subsequent  lines  rather  than	one  from  each input file.  Use tab for concatenation, unless a list is specified with -d
	       option.	Regardless of the list, the very last character of the file is forced to be a new-line.

Examples
       ls | paste -d" " -
       list directory in one column
       ls | paste - - - -
       list directory in four columns
       paste -s -d"	
" file
       combine pairs of lines into lines

Diagnostics
       line too long
		 Output lines are restricted to 511 characters.

       too many files
		 Except for -s option, no more than 12 input files may be specified.

See Also
       cut(1), grep(1), pr(1)

																	  paste(1)
All times are GMT -4. The time now is 07:38 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy