i'm a beginner in ash and i want to convert this bash script to ash.
this script send a xml file to a nagios server :
Code:
#!/bin/bash
PROGNAME=$(basename $0)
RELEASE="Revision 0.3"
print_release() {
echo "$RELEASE"
}
print_usage() {
echo ""
echo "$PROGNAME $RELEASE - Send NRPD script for Nagios"
echo ""
echo "Usage: send_nrdp.sh -u URL -t token [options]"
echo ""
echo "Usage: $PROGNAME -h display help"
echo ""
}
print_help() {
print_usage
echo ""
echo "This script is used to send NRPD data to a Nagios server"
echo ""
echo "Required:"
echo " -u"," URL of NRDP server. Usually http://<IP_ADDRESS>/nrdp/"
echo " -t"," Shared token. Must be the same token set in NRDP Server"
echo ""
echo "Options:"
echo " Single Check:"
echo " -H host name"
echo " -s service name"
echo " -S State"
echo " -o output"
echo ""
echo " STDIN:"
echo " [-d delimiter] (default -d \"\\t\")"
echo " With only the required parameters $PROGNAME is capable of"
echo " processing data piped to it either from a file or other"
echo " process. By default, we use \t as the delimiter however this"
echo " may be specified with the -d option data should be in the"
echo " following formats one entry per line."
echo " For Host checks:"
echo " hostname State output"
echo " For Service checks"
echo " hostname servicename State output"
echo ""
echo " File:"
echo " -f /full/path/to/file"
echo " This file will be sent to the NRDP server specified in -u"
echo " The file should be an XML file in the following format"
echo " ##################################################"
echo ""
echo " <?xml version='1.0'?>"
echo " <checkresults>"
echo " <checkresult type=\"host\" checktype=\"1\">"
echo " <hostname>YOUR_HOSTNAME</hostname>"
echo " <state>0</state>"
echo " <output>OK|perfdata=1.00;5;10;0</output>"
echo " </checkresult>"
echo " <checkresult type=\"service\" checktype=\"1\">"
echo " <hostname>YOUR_HOSTNAME</hostname>"
echo " <servicename>YOUR_SERVICENAME</servicename>"
echo " <state>0</state>"
echo " <output>OK|perfdata=1.00;5;10;0</output>"
echo " </checkresult>"
echo " </checkresults>"
echo " ##################################################"
echo ""
echo " Directory:"
echo " -D /path/to/temp/dir"
echo " This is a directory that contains XML files in the format"
echo " above. Additionally, if the -d flag is specified, $PROGNAME"
echo " will create temp files here if the server could not be reached."
echo " On additional calls with the same -D path, if a connection to"
echo " the server is successful, all temp files will be sent."
exit 0
}
send_data() {
pdata="token=$token&cmd=submitcheck&XMLDATA=$1"
if [ ! "x$curl" == "x" ];then
rslt=`curl -f --silent --insecure -d "$pdata" "$url/"`
ret=$?
else
rslt=`wget -q -O - --post-data="$pdata" "$url/"`
ret=$?
fi
status=`echo $rslt | sed -n 's|.*<status>\(.*\)</status>.*|\1|p'`
message=`echo $rslt | sed -n 's|.*<message>\(.*\)</message>.*|\1|p'`
if [ $ret != 0 ];then
echo "ERROR: could not connect to NRDP server at $url"
# verify we are not processing the directory already and then write to the directory
if [ ! "$2" ] && [ $directory ];then
if [ ! -d "$directory" ];then
mkdir -p "$directory"
fi
# This is where we write to the tmp directory
echo $xml > `mktemp $directory/nrdp.XXXXXX`
fi
exit 1
fi
if [ "$status" != "0" ];then
# This means we couldn't connect to NRPD server
echo "ERROR: The NRDP Server said $message"
# verify we are not processing the directory already and then write to the directory
if [ ! "$2" ] && [ $directory ];then
if [ ! -d "$directory" ];then
mkdir -p "$directory"
fi
# This is where we write to the tmp directory
echo $xml > `mktemp $directory/nrdp.XXXXXX`
fi
exit 2
fi
# If this was a directory call and was successful, remove the file
if [ $2 ] && [ "$status" == "0" ];then
rm -f "$2"
fi
# If we weren't successful error
if [ $ret != 0 ];then
echo "exited with error "$ret
exit $ret
fi
}
# Parse parameters
while getopts "u:t:H:s:S:o:f:d:c:D:hv" option
do
case $option in
u) url=$OPTARG ;;
t) token=$OPTARG ;;
H) host=$OPTARG ;;
s) service=$OPTARG ;;
S) State=$OPTARG ;;
o) output=$OPTARG ;;
f) file=$OPTARG ;;
d) delim=$OPTARG ;;
c) checktype=$OPTARG ;;
D) directory=$OPTARG ;;
h) print_help 0;;
v) print_release
exit 0 ;;
esac
done
if [ ! $checktype ]; then
checktype=1
fi
if [ ! $delim ]; then
delim=`echo -e "\t"`
fi
if [ "x$url" == "x" -o "x$token" == "x" ]
then
echo "Usage: send_nrdp -u url -t token"
exit 1
fi
# detecting curl
if [[ `which curl` =~ "/curl" ]]
then curl=1;
fi
# detecting wget if we don't have curl
if [[ `which wget` =~ "/wget" ]]
then
wget=1;
fi
if [[ ! $curl && ! $wget ]];
then
echo "Either curl or wget are required to run $PROGNAME"
exit 1
fi
checkcount=0
if [ $host ]; then
xml=""
# we are not getting piped results
if [ "$host" == "" ] || [ "$State" == "" ]; then
echo "You must provide a host -H and State -S"
exit 2
fi
if [ "$service" != "" ]; then
xml="$xml<checkresult type='service' checktype='$checktype'><servicename>$service</servicename>"
else
xml="$xml<checkresult type='host' checktype='$checktype'>"
fi
xml="$xml<hostname>$host</hostname><state>$State</state><output>$output</output></checkresult>"
checkcount=1
fi
# Detect STDIN
########################
if [ ! -t 0 ]; then
xml=""
# we know we are being piped results
IFS=$delim
while read -r line ; do
arr=($line)
if [ ${#arr[@]} != 0 ];then
if [[ ${#arr[@]} < 3 ]] || [[ ${#arr[@]} > 4 ]];then
echo "ERROR: STDIN must be either 3 or 4 fields long, I found "${#arr[@]}
else
if [ ${#arr[@]} == 4 ]; then
xml="$xml<checkresult type='service' checktype='$checktype'>
<servicename>${arr[1]}</servicename>
<hostname>${arr[0]}</hostname>
<state>${arr[2]}</state>
<output>${arr[3]}</output>"
else
xml="$xml<checkresult type='host' checktype='$checktype'>
<hostname>${arr[0]}</hostname>
<state>${arr[1]}</state>
<output>${arr[2]}</output>"
fi
xml="$xml</checkresult>"
checkcount=$[checkcount+1]
fi
fi
done
IFS=" "
fi
if [ $host ] || [ ! -t 0 ] ;then
xml="<?xml version='1.0'?><checkresults>$xml</checkresults>"
send_data "$xml"
echo "Sent $checkcount checks to $url"
fi
if [ $file ];then
xml=`cat $file`
send_data "$xml"
fi
if [ $directory ];then
#echo "Processing directory..."
for f in `ls $directory`
do
#echo "Processing $f file..."
# take action on each file. $f store current file name
xml=`cat $directory/$f`
#echo $xml
send_data "$xml" "$directory/$f"
done
fi
Hi,
I have to write a program to compare 2 files for copying.
the program is ran on Solaris 5.8 like this:
script.sh file1.txt file2.txt
I wrote the program using bash and it took me forever since I am a beginner but it works very well.
I'm getting so close to the deadline and I... (2 Replies)
Hi,
For my bash script, terminal with bash is generate an OK output and program works right.
already,
terminal with ash have "line 48: syntax error: Bad substitution" output and program don't work.
:confused: (0 Replies)
can any body translate the follwing script into one that works in bash?
#!/usr/bin/perl
# classify_books.pl
my $csv_file = shift;
my %categories = ( 'childrens' => 'childrens_books.txt',
'horror' => 'horror_books.txt',
'sports ' =>... (3 Replies)
Guys
I now have a script that's working in a BASH environment, however one line doesn't appear to be working on an embedded device that has a busybox therefore ASH shell. I've googled but there's very little I can find regarding the ASH shell.
In BASH the following line works...
if ] ;... (6 Replies)
dear all,
i need your advice for convert bash shell to C programming
INDEX=/zpool1/NFS/INDEX/${1}
SCRIPT=/zpool1/NFS/script/${1}
LIST=SAMPLE
cd ${SCRIPT}
for i in `cat ${LIST}`
do
GETDATE=`echo ${i}|awk '{print substr($1,9,8)}'`
/usr/xpg4/bin/awk -F ":" '{close(f);f=$4}{print >>... (2 Replies)
Hi All,
I have a script that I wrote on a bash shell, I use it to sort files from a directory into various other directories. I have an variable set, which is an array of strings, I then check each file against the array and if it is in there the script sorts it into the correct folder.
But... (5 Replies)
I wrote Bash script and now I want to convert it to Ash. One headache is this function:
do_adduser() {
setaddprompt
_arr_add=("Add manually" "Add via TXT" "return to main menu" "exit program")
select add_action in "${_arr_add}"
do
case "$REPLY" in
1)... (7 Replies)
I'm trying to convert this working bash script into an Ash script,
read -p "Username:" _username
if ! ]]; then
echo "Valid"
else
echo "INVALID"
fi
However, Ash does not recognize the "=~" character.
How can I do this?
Also, is there a good reference guide, so I... (5 Replies)
I am using bash that when run downloads a file a verifies that there is data in it. What I am not able to do is have a user enter a date in any format they wish and have it converted to m-d-yyyy. Thank you :).
Bash
printf " Welcome to NGS analysis, checking for new files and creating a... (2 Replies)