I'm working on writing my very first borne shell program and I need some help. I think I'm pretty close to having this correct but I may be off. I think my actual program is coded correctly but the commands I use within it I think are what's throwing it off?
**Purpose of the program: To find all files in a directory that contain a given string.
This program runs with only 1 or 2 arguments. The first argument can only consist of upper/lower-case letters. This is the string that you'll be searching for within the directory. If only one command line argument is given you recursively search all files and subdirectories within your current working directory. You then output all files containing the search pattern.
If two arguments are supplied. The first one is still the same as above (the string you're searching for) but the second argument becomes the directory you want to search. Again, I need to output the files that contain the search pattern.
Obviously this involves checking the arguments to make sure they are valid. Argument 1 must be an upper/lower-case letter and argument 2 (if supplied) must be a relative/absolute pathname to an existing directory.
Here's what I have so far:
______________________________________________
Code:
#!/bin/sh
# Checks for valid number of command arguments
if [ $# -eq 0 -o $# -gt 2 ]; then
echo "Invalid number of arguments: 1 or 2 only!"
exit 1
fi
case $# in
"1") # Checks for validity of command argument 1
echo $1 | egrep -si "^[a-z]+$"
# Error message for invalid argument 1
if [ $? -ne 0 ]; then
echo "Invalid argument 1: Letters only!"
exit 2
fi
# Searches through all files in the current working
# directory
for i in `find . -type f -print`
do
# If current file is readable then search for the
# string
if [ -r $i ]; then
grep -li "$1 " $i
fi
done
"2") # Checks for validity of command argument 1
echo $1 | egrep -si "^[a-z]+$"
# Error message for invalid argument 1
if [ $? -ne 0 ]; then
echo "Invalid argument 1: Letters only!"
exit 2
fi
# Checks for validity of command argument 2
find $2 -type d
# Error message for invalid argument 2
if [ $? -ne 0 ]; then
echo "Invalid argument 2: Directory path only!"
exit 3
fi
# Searches through all files in the directory specified
for i in `find .$2 -type f -print`
do
# If current file is readable then search for the
# string
if [ -r $i ]; then
grep -li "$1 " $i
fi
done;;
esac
exit 0
Just want to know a few conversion tricks.
in Borne Shell, I have the line:
if test -s testmap
then
...
fi
## testmap is a filename and I wanna test whether it exists
## then do whatever
How can I convert that to C Shell?
I've tried:
if (test -s testmap) then
...
endif
but it... (3 Replies)
Now, am in a very tight situation here. I really dont expect anyone to understand but please, try your best.
am trying to right a program that goes back to the previous entry to correct a mistake.
heres what am trying to do. i write a program like this
Name : James Holgston... (1 Reply)
Hello -
I've serached the web but can't find much on array script variables (except that C-shell variables are arrays!)
I'm trying to form a 2-D string array: (this is what I want, but in java)
String list = { {"one", "two"}, {"three"} };
I know this is a 1-D string array shell... (4 Replies)
Hi experts,
I am new bee in unix programming. How to differenciate a Borne and C shell programming. Can i write a C shell syntax in Borne again shell.
Please send me the good links on Borne and Cshell programming . Any help in this regard will be highly appreciated.
Regards,
Azaz. (3 Replies)
in the beginners book i have it gives an exercise to try. saying to make a script that examines the time. it should keep examining every second or so and say some sort of message. Can anyone help me get going.
Thanks (3 Replies)
I need anwser to this qestion!
I havewirte a script that
provides line numbered contents of a file
which must make use of the following
control structures
files
Command line arguments
I am a complete new commer to unix and bourne shell scripting
can any one help (1 Reply)
Hi all,
I am trying to get a file from an ftp server and i have the list of files which needs to be get from the ftp server.
grep unix_prg*.* log.txt > log1.txt
log1.txt (which has the list of files)
06-29-09 00:00AM 3550258 unix_prg090629
06-28-09 07:00PM ... (7 Replies)
I have a code:
if
then#{ process daily files
for file in *_${Today}*.csv *_${Today}*.txt
do
if ||
then
echo "This file will be processed in separate script"
continue
fi
if ;then
... (2 Replies)
1. I've have to write a shell program that accepts Ctrl+T (in linux os in c language) and should print out the current time and date to the screen. I've written the following code but i've to type ^T individual rather than pressing ctrl+T(^T) to get the output. :
2. How do i make the shell... (2 Replies)
Discussion started by: zorro_phu
2 Replies
LEARN ABOUT SUSE
use
USE(1) User Commands USE(1)NAME
use - Frontend to the Usepackage Environment Manager
SYNOPSIS
csh and derivatives:
source /usr/share/usepackage/use.csh
bourne shell and derivatives:
source /usr/share/usepackage/use.bsh
korn shell:
. /usr/share/usepackage/use.ksh
use [-vs] [-f file] package ...
use -l
DESCRIPTION
Usepackage is an environment management program. It is based on the principle of packages - collections of executables that share a common
set of necessary environment variables, such as PATH, MANPATH or LD_LIBRARY_PATH.
For each given package, use sources the appropriate environment information into the current shell. The environment information is speci-
fied in a configuration file, see usepackage(1).
OPTIONS
-v Output verbose information to the standard error stream.
-s Silence warnings for un-matched packages. This is useful in a shell rc script when a package is known not to be available on all
architectures that the shell is used on.
-f file
Specify an alternate initial configuration file.
-l List available packages and groups.
FILES
/usr/share/usepackage/usepackage.conf
The default configuration file.
/usr/share/usepackage/use.csh
Shell setup for csh and derivatives.
/usr/share/usepackage/use.bsh
Shell setup for bourne shell and derivatives.
/usr/share/usepackage/use.ksh
Shell setup for ksh.
/usr/bin/usepackage
The underlying Usepackage executable.
ENVIRONMENT
Other than the reading and re-definition of environment variables for package setup, use also uses the following environment variables for
user configuration:
PACKAGES_PATH Colon-separated path list giving the directories to search for configuration files. Shell-style tilde (~) user-directory
escapes are expanded.
HOME If present in the environment, this is used to provide the expansion for the tilde (~) user-directory.
SHELL If present in the environment, the last path component of this is used for shell matching (see SYNTAX) and detecting the
style of environment output that should be used, see usepackage(1).
COPYRIGHT
Usepackage Environment Manager
Copyright (C) 1995-2005 Jonathan Hogg
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MER-
CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
SEE ALSO usepackage(1), csh(1), sh(1), ksh(1)Usepackage $Date: 2005/12/11 16:42:09 $ USE(1)