I am working on limited basic set of maths routines for ksh93 that can be sourced as . ./ksh_math.sh
Notice that the Korn shell doesn't need that: There is a variable FPATH, which works quite like PATH, but for functions: You set it to a (list of) directory/ies and every function not yet defined will be searched there. It is possible to build "libraries" that way by collecting functions into a certain directory.
In fact i use this feature heavily in my scripts. Here is my "standard script template":
Code:
#! /bin/ksh
# ------------------------------------------------------------------------------
# script-template template for scripts
# ------------------------------------------------------------------------------
# Author.....:
# last update: 2000 00 00 by:
# ------------------------------------------------------------------------------
# Revision Log:
# - 0.xx 2000 00 00 Original Creation
# - <keyword here>
#
# ------------------------------------------------------------------------------
# Usage:
#
#
# Example:
#
# Prerequisites:
#
# ------------------------------------------------------------------------------
# Documentation:
#
# Parameters:
# returns:
# ------------------------------------------------------------------------------
# known bugs:
#
# none
# ------------------------------------------------------------------------------
# ................................(C) 2000 ... .................................
# ------------------------------------------------------------------------------
if [ -z "$DEVELOP" ] ; then # set environment
. /usr/local/lib/ksh/f_env
else
. ~/lib/f_env
fi
# local variables
typeset chUsageShort="usage: $0 [-(?|h)] | [-V] [-S]"
typeset achUsageLong[0]="$chUsageShort"
typeset achUsageLong[1]=" "
typeset achUsageLong[2]="Where means"
typeset achUsageLong[3]=" -?|h[elp] display this help"
typeset achUsageLong[4]=" -V verbose, fulldebug mode"
typeset achUsageLong[5]=" -S simulation mode, cmds only displayed"
typeset chProgBase="${chProgName##*/}" # ^= basename $0
typeset chOpt=""
while getopts ":hVS" chOpt ; do # process commandline
case "$chOpt" in
h) # display help
f_usage full
;;
"?")
if [ "$chOpt" == "?" -a "$OPTARG" == "?" ] ; then
f_usage full
else
f_die 1 "unknown option -${OPTARG}"
fi
;;
V) # fulldebug mode
export chFullDebug='set -xv'
;;
S) # simulation mode
SIMULATE='print -'
;;
esac
done
<your code here>
# -- EOF template.sh
where f_usage and f_env are functions in this library. Here is f_env:
Code:
# ------------------------------------------------------------------------------
# f_env() set the environment to a defined state
# ------------------------------------------------------------------------------
# Author.....: Wolf Machowitsch
# last update: 2001 08 08 by: Wolf Machowitsch
# ------------------------------------------------------------------------------
# Revision Log:
# - 0.99 1999 01 21 Original Creation
# -
#
# - 1.00 1999 03 12 Production release
# Reviewed version. chFullDebug can now be set via
# the commandline outside the script too. However,
# in this case the value of $chFullDebug is not
# checked for validity.
# -
#
# - 1.01 1999 04 18 Developers switch
# f_env now scans the environment for a variable
# $DEVELOP. If it is non-null, then FPATH is not
# set to "/usr/local/lib/ksh" but to "~/lib".
# This way it is possible to test new developments
# for the library before migrating them to the
# production environment.
#
# - 1.10 1999 05 01 bugfix version: system environment used
# /etc/environment is now parsed in in f_env().
# Not to do this would leave variables like ODMDIR
# unset. Some AIX processes rely on this.
#
# - 1.20 1999 05 10 Log- and Error-file
# support added for error- and logfile as used in
# the f_Cmd*-functions.
#
# - 1.30 2000 03 07 User- and Host-information
# to support the automated mailing facility some
# info about effective UID, hostname, etc. is
# retrieved.
#
#
# - 1.40 2001 05 23 Linux ready
# the 'uname' command is now used to find out the
# OS we're running. Accordingly either /etc/profile
# or /etc/environment is sourced in and a variable
# is set.
#
# - 1.41 2001 08 08 bugfix
# since in Linux '/bin' is not a link to '/usr/bin'
# (like in AIX) '/bin' is now included in the path.
#
# - 1.50 2015 09 24 HMC-List
# added a list of known HMCs to use for f_GetHostList()
#
# ------------------------------------------------------------------------------
# Usage:
# f_env() is to be PARSED into the scripts environment. The following
# piece of code shows how to use it.
#
# Example:
# #!/bin/ksh
# # example script for using f_env()
# . /usr/local/lib/ksh/f_env
# # ---- here goes the rest of your code -----
# exit
#
# Prerequisites:
# ------------------------------------------------------------------------------
# Documentation:
# f_env() is intended to be used at the beginning of scripts to make
# the environment always the same for every script instead of being
# dependant of the environment the developer has set in his shell.
# To use this script it has to be PARSED rather than called as a
# function.
#
# Parameters: void
# returns: void
# ------------------------------------------------------------------------------
# known bugs:
#
# none
# ------------------------------------------------------------------------------
# ......................(C) 99 Wolf Machowitsch ................................
# ------------------------------------------------------------------------------
if [ -z "$NEVER_USE_THIS_VAR" ] ; then # are we called recursively ?
unset ENV # clear the environment
#---------------------------------------------------- set basic environment
typeset -x OS=$(uname -a | cut -d' ' -f1) # find out the OS
# read in standard environment
case "$OS" in
AIX)
. /etc/environment
;;
Linux)
. /etc/profile
;;
*)
. /etc/environment
;;
esac
# set default TERM variable
case "$OS" in
AIX)
TERMDEF="$(termdef)"
;;
Linux)
TERMDEF="$TERM"
;;
*)
TERMDEF="$TERM"
;;
esac
typeset -x TERM=${TERMDEF:-'wyse60'} # set default TERM variable
typeset -x LANG=C # default language environment
typeset -x EDITOR=vi # what else ? ;-))
typeset -x VISUAL=$EDITOR
typeset -x PATH="/usr/bin" # set the path
PATH="$PATH:/bin"
PATH="$PATH:/etc"
PATH="$PATH:/usr/sbin"
PATH="$PATH:/usr/ucb"
PATH="$PATH:/sbin"
PATH="$PATH:/usr/bin/X11"
PATH="$PATH:/usr/local/bin" # tools, home for scripts
PATH="$PATH:/usr/local/sbin" # -"-
typeset -x chTmpDir="" # path for temporary files
#---------------------------------------------------- debugging stuff
if [ -z "$chFullDebug" ] ; then # debug switch
typeset -x chFullDebug=""
else
typeset -x chFullDebug # export if already set
fi
typeset -x SIMULATE='' # set to 'print' for
# simulation mode
typeset -x TRACE='' # set to 'on' for trace mode
if [ -z "$DEVELOP" ] ; then
typeset -x FPATH="/usr/local/lib/ksh" # set fnc path for fnc lib
FPATH="$FPATH:/usr/local/bin"
FPATH="$FPATH:/usr/local/sbin"
else
typeset -x FPATH=~/lib # for lib development
fi
#---------------------------------------------------- global constants
typeset -x chProgName="$0" # const. for main program name
typeset -x chUsageShort="" # short usage message
typeset -x achUsageLong[0]="" # long usage message (line)
if [ -z "$fLogFile" ] ; then # log file
if [ $(f_ImRoot ; print $?) -eq 0 ] ; then
typeset -x fLogFile='/usr/local/log/system.log'
else
typeset -x fLogFile=~/system.log
fi
else
typeset -x fLogFile
fi
if [ -z "$fErrFile" ] ; then # error file
if [ $(f_ImRoot ; print $?) -eq 0 ] ; then
typeset -x fErrFile='/usr/local/log/system.err'
else
typeset -x fErrFile=~/system.err
fi
else
typeset -x fErrFile
fi
#---------------------------------------------------- automated mail
typeset -x chUser=$(id -nur)
#-------------------------------------------------- site dependent includes
# HP Open View at xxx
typeset -x AlertSW='OV' # alerting software
typeset -x AlertCmd='/usr/lpp/OV/bin/opcmsg' # for f_Alert()
typeset -x AlertApp='' # are defined in the script
typeset -x AlertObj=''
# HMC list for xxx
typeset -x CachHMC[1]="xxx-f-hmc1"
typeset -x CachHMC[2]="xxx-f-hmc2"
typeset -x CachHMC[3]="xxx-f-hmc3"
typeset -x CachHMC[4]="xxx-f-hmc4"
#-------------------------------------------------- reentrancy protection
typeset -x NEVER_USE_THIS_VAR="KILROY_WAS_HERE"
fi
# --- EOF f_env
Notice that there is a variable "DEVELOP": set it to any value and the script will use not the library in /usr/local/lib/ksh but the one in ~/lib. This way you can have a personal copy of the lib and tinker with it without affecting other scripts using the same functions. Also notice that i have some logging functions which all write to a continuous log defined here (/usr/local/log/system.log and /usr/local/log/system.err).
If you are interested i can eventually publish more functions from my library.
@Corona: ksh93 is a widely used shell. In every AIX version since 5L it is included (as ksh93) and in most Linux distributions it is part of the installable base. AIX uses a ksh88 (as ksh and as sh) as the default shell since AIX 4 (about 1997).
Hi all!
Hi all!
I am working with a problem to find the smallest floating point number that can be represented.
I am going in a loop ,stating with an initial value of 1.0 and then diving it by 10 each time thru the loop.
So the first time I am getting o.1 which I wanted.But from the next... (4 Replies)
Hello,
i have some variables say:
x=1.4
y=3.7
I wish to round off these values to :
x = 2 (after rounding off)
y = 4 (after rounding off)
I am stuck.
Please help. (7 Replies)
Hi,
I am compiling "HelloWorld" C progam on 32-bit CentOS and i want to execute it on 64-bit CentOS architecture.
For that i copied the a.out file from 32-bit to 64-bit machine, but while executing a.out file on 64bit machine I am getting "Floating point exception error".
But we can run... (3 Replies)
Hi,
Could any one tell me how to compare to floating point no. using test command. As -eq option works on only intergers.
i=5.4
if
then
echo "equal"
else
echo "not equal"
fi
here output will be equal even though no. are unequal.
Thanks,
ravi (1 Reply)
is it not possible to simply di aritmetic without using bc or awk
i have tried folllowing operatrions but they support only integer types plz suggest me code for floating using values stored in the variables.the ans i get is integer and if i input floating values i get error numeric constant... (6 Replies)
Anyone help me i cant found the error of floating point
if needed, i added the code complete
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct
{
int hh;
int mm;
int ss;
char nom;
int punt;
}cancion;
typedef struct... (9 Replies)
I am writing a script in zsh shell, it fetchs a number from a file using the awk command, store it as a variable, which in my case is a small number 0.62000. I want to change this number by multiplying it by 1000 to become 620.0 using the command in the script
var2=$((var1*1000))
trouble is... (2 Replies)
Hi,
I wish to compare the CPU LOAD 1 min with 5mins and 15mins.
If 1 min's CPU LOAd spike 3% compare to 5 mins or 15 mins CPU Load, it is warning.
If 1 min's CPU LOAd spike 5% compare to 5 mins or 15 mins CPU Load, it is critical.
However I received following code error, I google it and... (10 Replies)