Please learn to use CODE tags to make your scripts and data readable.
The problem is scope -- in some versions of shells, the pipe-into-while-loop is run in a separate process, so that variables are out of scope -- they no longer exist, and variables are not passed up from children to parents.
Some versions of Linux will have a recent version of ksh and allow your script to run as you wish (code omitted, paths and names made local):
Code:
$ ./s2
Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-1-686, i686
Distribution : Debian GNU/Linux 5.0
ksh 93s+
OUTBSTAT[0]=1000
OUTBSTAT[1]=1001
OUTBSTAT[2]=1002
OUTBSTAT[0]=1000
OUTBSTAT[1]=1001
OUTBSTAT[2]=1002
However, a portable method would be to re-direct into the while loop, useful for pdksh, for example, on this different version of Linux:
Code:
#!/bin/ksh
echo
set +o nounset
LC_ALL=C ; LANG=C ; export LC_ALL LANG
echo "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version "=o" $(_eat $0 $1)
set -o nounset
echo
K=0
SCRIPT_DIR=/local/home/temp/Gen
SCRIPT_DIR=.
# cat $SCRIPT_DIR/test/list.txt | while read WRDLST
# cat $SCRIPT_DIR/list.txt | while read WRDLST
cp $SCRIPT_DIR/list.txt t1
while read WRDLST
do
# set -A STAT `cat $SCRIPT_DIR/test/shst.txt | grep $WRDLST | awk '{print $2}'`
set -A STAT `cat $SCRIPT_DIR/shst.txt | grep $WRDLST | awk '{print $2}'`
OUTBSTAT[$K]=${STAT[0]}
echo "OUTBSTAT[$K]=${OUTBSTAT[$K]}"
K=`expr $K + 1 `
done <t1
K=0
while [ $K -ne 3 ]
do
echo " OUTBSTAT[$K]=${OUTBSTAT[$K]}"
K=`expr $K + 1`
done
exit 0
Producing:
Code:
% ./s1
Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.11-x1, i686
Distribution : Xandros Desktop 3.0.3 Business
PD KSH v5.2.14 99/07/13.2
OUTBSTAT[0]=1000
OUTBSTAT[1]=1001
OUTBSTAT[2]=1002
OUTBSTAT[0]=1000
OUTBSTAT[1]=1001
OUTBSTAT[2]=1002
This is a common problem among shells. Moral: don't pipe into while loops ... cheers, drl
Hi,
I am new to shell scripting and my below script is not giving result for 2 or more arguments. Can anyone help pls.
#!/bin/sh
sname=$(basename $(readlink -nf $0))
echo "This is $sname, running at $(date)"
echo "It is running on $(hostname)"
echo "Script being run by"
echo " User... (3 Replies)
I have five classes. 2 composition classes,1 aggregation class and 1 dependency class.I have coded all the classes but one of my test program is not giving me the expected result.I have the following classes:
TimeStamp
Interval (composition of 2 TimeStamps)
TimeSheet ( aggregation of many... (3 Replies)
Hi folks,
I am facing issue of my system (host1) getting hanged after throwing following ntpd messages. I am not able to ssh to the server there after. only option is to restart the host:
Dec 29 02:58:51 host1 ntpd: time reset -0.207907 s
Dec 29 02:58:51 host1 ntpd: synchronisation lost
Dec 29... (0 Replies)
Why does $0 return the word usage rather than the script name when used in a function?
Baffeled on this one, any help appreciated.
usage()
{
echo "$0 -cs <number of batches>\n"
echo "$0 -c 4"
echo "$0 -s 4"
# echo "-c = Create"
# echo "-s = Submit\n"
exit 1
}
$... (1 Reply)
my system get rebooted by its self after its came up i try to check the error log
P690/>errpt | more
Cannot open error message catalog /usr/lib/nls/msg/en_US/codepoint.cat.
The error report will still run, but it will not have explanatory messages
P690/>ls -lrt... (1 Reply)
Hi,
I need to copy files from a source directory to a destination directory in unix.
I'm using the file::copy for the actual copy.
The problem is that the source and dest directories are supplied by different users, who might type the name of the directories in various combinations of lower... (6 Replies)
Hi Guys,
I am developing a script to monitor GUI based FileNet Component "Component Manager" which logs it's running status in a log file.
Log file is a huge file so in script I put last 300 lines of log file in seperate file and run script every 5 minutes.
I am searching the string... (2 Replies)
Hello All,
We have a jave server running on both linux and Solaris environments.
On solaris,it consumes only 600-700MB whereas it goes upto 21G in Linux.
I am monitoring the memory consumption through top command.
Is this high memory consumption expected in Linux? (1 Reply)
Hello,
I am running below command as root user
#nodetool cfstats tests | grep "Memtable switch count"
Memtable switch count: 12
Where as when I try to run same command as another user it gives different result.
#su -l zabbix -s /bin/bash -c "nodetool cfstats tests | grep "Memtable switch... (10 Replies)
Hi,
i have a source file and have 3 columns and separated by "|" .i want to split this 3 columns in different variable.When i am executing this values indivisually giving correct result but when the same execute inside a for loop,it's giving issues.
Src file(jjj.txt)
-------... (8 Replies)
Discussion started by: raju2016
8 Replies
LEARN ABOUT BSD
locale
LOCALE(1) Linux User Manual LOCALE(1)NAME
locale - get locale-specific information
SYNOPSIS
locale [option]
locale [option] -a
locale [option] -m
locale [option] name...
DESCRIPTION
The locale command displays information about the current locale, or all locales, on standard output.
When invoked without arguments, locale displays the current locale settings for each locale category (see locale(5)), based on the settings
of the environment variables that control the locale (see locale(7)). Values for variables set in the environment are printed without dou-
ble quotes, implied values are printed with double quotes.
If either the -a or the -m option (or one of their long-format equivalents) is specified, the behavior is as follows:
-a, --all-locales
Display a list of all available locales. The -v option causes the LC_IDENTIFICATION metadata about each locale to be included in
the output.
-m, --charmaps
Display the available charmaps (character set description files). To display the current character set for the locale, use locale
-c charmap.
The locale command can also be provided with one or more arguments, which are the names of locale keywords (for example, date_fmt, ctype-
class-names, yesexpr, or decimal_point) or locale categories (for example, LC_CTYPE or LC_TIME). For each argument, the following is dis-
played:
* For a locale keyword, the value of that keyword to be displayed.
* For a locale category, the values of all keywords in that category are displayed.
When arguments are supplied, the following options are meaningful:
-c, --category-name
For a category name argument, write the name of the locale category on a separate line preceding the list of keyword values for that
category.
For a keyword name argument, write the name of the locale category for this keyword on a separate line preceding the keyword value.
This option improves readability when multiple name arguments are specified. It can be combined with the -k option.
-k, --keyword-name
For each keyword whose value is being displayed, include also the name of that keyword, so that the output has the format:
keyword="value"
The locale command also knows about the following options:
-v, --verbose
Display additional information for some command-line option and argument combinations.
-?, --help
Display a summary of command-line options and arguments and exit.
--usage
Display a short usage message and exit.
-V, --version
Display the program version and exit.
FILES
/usr/lib/locale/locale-archive
Usual default locale archive location.
/usr/share/i18n/locales
Usual default path for locale definition files.
CONFORMING TO
POSIX.1-2001, POSIX.1-2008.
EXAMPLE
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$ locale date_fmt
%a %b %e %H:%M:%S %Z %Y
$ locale -k date_fmt
date_fmt="%a %b %e %H:%M:%S %Z %Y"
$ locale -ck date_fmt
LC_TIME
date_fmt="%a %b %e %H:%M:%S %Z %Y"
$ locale LC_TELEPHONE
+%c (%a) %l
(%a) %l
11
1
UTF-8
$ locale -k LC_TELEPHONE
tel_int_fmt="+%c (%a) %l"
tel_dom_fmt="(%a) %l"
int_select="11"
int_prefix="1"
telephone-codeset="UTF-8"
The following example compiles a custom locale from the ./wrk directory with the localedef(1) utility under the $HOME/.locale directory,
then tests the result with the date(1) command, and then sets the environment variables LOCPATH and LANG in the shell profile file so that
the custom locale will be used in the subsequent user sessions:
$ mkdir -p $HOME/.locale
$ I18NPATH=./wrk/ localedef -f UTF-8 -i fi_SE $HOME/.locale/fi_SE.UTF-8
$ LOCPATH=$HOME/.locale LC_ALL=fi_SE.UTF-8 date
$ echo "export LOCPATH=$HOME/.locale" >> $HOME/.bashrc
$ echo "export LANG=fi_SE.UTF-8" >> $HOME/.bashrc
SEE ALSO localedef(1), charmap(5), locale(5), locale(7)COLOPHON
This page is part of release 4.15 of the Linux man-pages project. A description of the project, information about reporting bugs, and the
latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.
Linux 2017-09-15 LOCALE(1)