Sponsored Content
Full Discussion: Help on for loop in bash
Top Forums Shell Programming and Scripting Help on for loop in bash Post 302976095 by Don Cragun on Thursday 23rd of June 2016 10:13:57 PM
Old 06-23-2016
We may have a language barrier here. I am asking questions in shell, your answering in English.

If you have a bunch of files with names ending with the four characters .txt, I can use the shell filename matching pattern *.txt to get a list (produced by the shell before it invokes your script) of all of the files matching that filename matching pattern. The data passed as command-line arguments to your script will be filenames, not patterns. But, if the command-line argument was quoted ("*.txt"), then the arguments that your script would get would be filename matching patterns; not filenames. You have said that you aren't quoting your arguments, so using a variable named pattern to hold these filenames (not patterns) is misleading and confusing to people trying to understand your script.

But, when you're reading from standard input, if you're just typing text that will be read by your script, the shell will not perform filename matching pattern expansions to filenames of any patterns you type into your script; so if you are expecting the shell to expand filename matching patterns on command-line operands, you must just type in filenames; not filename matching patterns for lines that type into your script that you want it to read from standard input.

The following script shows you how you can read command-line operands or (if no operands are present after option parsing has been completed) or lines from standard input:
Code:
#!/bin/sh
if [ $# -gt 0 ]
then	for arg in "$@"
	do	printf '%s\n' "$arg"
	done
else	while IFS= read -r line
	do	printf '%s\n' "$line"
	done
fi | while IFS= read -r file
do	printf 'operand or stdin line #%d: "%s"\n' $((++cnt)) "$file"
done

This will work with any shell that uses basic POSIX shell requirements. It won't work with a traditional Bourne shell (since it doesn't support $((expression)) arithmetic substitutions).
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Simple loop in Bash

Hi, I want to do a simple loop where I have one column of text in a file and I want the loop to read each line of the file and do a simple command. The text file will be something like this: hostname1 hostname2 hostname3 hostname4 I am using Bash and have already come up with this to... (1 Reply)
Discussion started by: BrewDudeBob
1 Replies

2. Shell Programming and Scripting

bash and ksh: variable lost in loop in bash?

Hi, I use AIX (ksh) and Linux (bash) servers. I'm trying to do scripts to will run in both ksh and bash, and most of the time it works. But this time I don't get it in bash (I'm more familar in ksh). The goal of my script if to read a "config file" (like "ini" file), and make various report.... (2 Replies)
Discussion started by: estienne
2 Replies

3. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

4. Shell Programming and Scripting

Problem with for loop in bash

I'm trying to do a script where I want to see if all users home directories are only writable by owner. However, in my script I do not know how to implement the for loop so that all directories are checked. In mine, I am only checking the permissions for the first directory found. I do know that a... (3 Replies)
Discussion started by: detatchedd
3 Replies

5. Shell Programming and Scripting

BASH loop inside a loop question

Hi all Sorry for the basic question, but i am writing a shell script to get around a slightly flaky binary that ships with one of our servers. This particular utility randomly generates the correct information and could work first time or may work on the 12th or 100th attempt etc !.... (4 Replies)
Discussion started by: rethink
4 Replies

6. Shell Programming and Scripting

If loop in bash

Hello, I have a script that runs a series of commands. Halfway through the script, I want it to check whether everything is going alright: if it is, to proceed with the script, if it isn't to repeat the last step until it gets it right. My code so far looks like this, simplified a bit: ... (3 Replies)
Discussion started by: Leo_Boon
3 Replies

7. UNIX for Dummies Questions & Answers

Help with 3 variable bash loop

Hi all! I think someone might be able to solve my problem pretty easily. I am trying to run a bash loop with 3 variables. I know how to do: for var1 in `cat list1`; do for var2 in `cat list2`; do for var3 in `cat list3`; command var1 var2 > var3; done; done; done However, this will run all... (4 Replies)
Discussion started by: torchij
4 Replies

8. Shell Programming and Scripting

Bash For Loop Help

This is a short program I wrote to search through a directory and move files containing the keyword to a folder. #!/bin/bash echo 'What is the directory?' read DIR echo -e '\n' echo 'What is the keyword?' read KEY echo -e '\n' cd $DIR rmdir 'relevant_files' mkdir 'relevant_files'... (5 Replies)
Discussion started by: zenyoul
5 Replies

9. Shell Programming and Scripting

Bash Shell loop - Help !

Dear all Linux lover, I am a new learner to Bash Shell script and I would like to writing a script to to repeat my script. This mean I would like to have multiple same of result after running the .sh. ####### TIMES_NO=0 echo -n "Please enter the number for times to repeat ?" read... (10 Replies)
Discussion started by: Rocky888
10 Replies

10. Shell Programming and Scripting

Speed up bash loop?

I am running the below bash loop on all the files of a specific type (highlighted in bold) in a directory. There are 4 awk commands that use the input files to search another and look for a match. The input files range from 27 - 259 and are a list of names. The file that is searched is... (11 Replies)
Discussion started by: cmccabe
11 Replies
CONFGET(1)						    BSD General Commands Manual 						CONFGET(1)

NAME
confget -- read a variable from a configuration file SYNOPSIS
confget [-cSx] [-N | -n] [-f filename] [-m pattern] [-P postfix] [-p prefix] [-s section] [-t type] varname... confget [-] [-N | -n] [-f filename] [-m pattern] [-P postfix] [-p prefix] [-s section] [-t type] -L pattern... confget [-] [-N | -n] [-f filename] [-m pattern] [-P postfix] [-p prefix] [-s section] [-t type] -l confget [-hTV] DESCRIPTION
The confget utility examines a INI-style configuration file and retrieves the value of the specified variables from the specified section. Its intended use is to let shell scripts use the same INI-style configuration files as other programs, to avoid duplication of data. The confget utility may retrieve the values of one or more variables, list all the variables in a specified section, list only those whose names or values match a specified pattern (shell glob or regular expression), or check if a variable is present in the file at all. It has a ``shell-quoting'' output mode that quotes the variable values in a way suitable for passing them directly to a Bourne-style shell. Options: -c Check-only mode; exit with a code of 0 if any of the variables are present in the configuration file, and 1 if there are none. -f filename Specify the configuration file to read from, or ``-'' (a single dash) for standard input. -h Display program usage information and exit. -L Variable list mode; display the names and values of all variables in the specified section with names matching one or more specified patterns. -l List mode; display the names and values of all variables in the specified section. -m pattern Only display variables with if their values match the specified pattern. -N Always display the variable name along with the value. -n Never display the variable name, only the value. -P postfix Display this string after the variable name as a postfix. -p prefix Display this string before the variable name as a prefix. -S Quote the variable values so that the ``var=value'' lines may be passed directly to the Bourne shell. -s section Specify the configuration section to read. If this option is not specified, confget will use the first section found in the configuration file. However, if the configuration file contains variable definitions before a section header, confget will only examine them instead. -T List the available configuration file types that may be selected by the -t option. -t type Specify the configuration file type. -V Display program version information and exit. -x Treat the patterns as regular expressions instead of shell glob patterns. ENVIRONMENT
Not taken into consideration. EXIT STATUS
If the -c option is specified, the confget utility will exit with a status of 0 if any of the specified variables exist in the config file and 1 if none of them are present. In normal operation, no matter whether any variables were found in the configuration file or not, the confget utility exits with a status of 0 upon normal completion. If any errors should occur while accessing or parsing the configuration file, the confget utility will display a diagnostic message on the standard error stream and exit with a status of 1. EXAMPLES
Retrieve the variable machine_id from the system section of a configuration file: confget -f h.conf -s system machine_id Retrieve the page_id variable from an HTTP GET request, but only if it is a valid number: confget -f- -t http_get -x -m '^+$' page_id Retrieve the variable hostname from the db section, but only if it ends in ``.ringlet.net'': confget -f h.conf -s db -m '*.ringlet.net' hostname Display the names and values of all variables in the system section with names beginning with ``mach'' or ending in ``name'', appending a ``cfg_'' at the start of each variable name: confget -f h.conf -s system -p 'cfg_' -L 'mach*' '*name' Display the names and values of all variables in the system section: confget -f h.conf -s system -l Safely read the contents of the db section: eval `confget -f h.conf -s db -p db_ -S -l` SEE ALSO
For another way to parse INI files, see the Config::IniFiles(3) Perl module. STANDARDS
No standards documentation was harmed in the process of creating confget. BUGS
Please report any bugs in confget to the author. AUTHOR
The confget utility was conceived and written by Peter Pentchev <roam@ringlet.net> in 2008. BSD
October 25, 2008 BSD
All times are GMT -4. The time now is 04:52 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy