expr to translate the date command

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions expr to translate the date command
# 1  
Old 03-02-2011
expr to translate the date command { solved }

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

1. Write a script called "tod" that will display the time of day in am or pm notation rather then the 24 hour clock time. Use expr to convert from 24-hour clock time.
Use either (if) or (case) statement. Use the standard, unmodified output from the date command for this exercise.



2. Relevant commands, code, scripts, algorithms:
date, cut and expr

3. The attempts at a solution (include all code and scripts):#!/bin/sh -xv
# this is the date script
#this will change the 24hr to 12hr
#
#
let i=$"`date +%H`"
let MIN=$"`date | cut -c15-19`"
if [ $i -gt 12 ]
then
`expr $i -12`
echo " $i:$MIN"
fi
esle
echo "$i:$MIN"
fi
########################################
I've also used
########################################
HR=$"`date | cut -c1-2`"
MT=$"`date | cut -c15-19
NEWHR=$"`expr $HR - 12`"
if [ $HR -le 12 ]
then
echo "$HR:$MT"
esle
echo " $NEWHR:$MIN"
fi
########################################
and
########################################
HR=$"`date | cut -c1-2`"
MT=$"`date | cut -c15-19
NEWHR="`expr $HR - 12`

case $NEWHR
in
24) `expr $NEWHR -12`;;
echo "$NEWHR:$MT"
23) `expr $HR -12`;;
and so on till
*) to eat up the rest
esac



4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):
Washtenaw community college, Washtenaw MI, Phil Geyer, CIS 221.


Any help would be great this has been driving me nuts all spring break. Note : I'm using bash shell, the expr is the thing going wrong it keeps giving me a non-numeric argument error.

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

---------- Post updated at 07:44 PM ---------- Previous update was at 07:39 PM ----------

#!/bin/sh -xv
# this is the date script
#this will change the 24hr to 12hr
#
#
let i=$"`date +%H`"
+ date +%H
+ let i=$19
./datt: let: not found
let MIN=$"`date | cut -c15-19`"
+ date
+ cut -c15-19
+ let MIN=$43:47
./datt: let: not found
if (\ [ "$i" -gt 12 \) -a \( "$i" -eq 24 \) ]
then
./datt: syntax error at line 10: `then' unexpected
I figured it out thank you for helping me
code:
this will change the 24hr to 12hr
#
#
HR=$"`date +%H`"
MIN=$"`date +%M`"
SEC=$"`date +%S`"
NEWHR=$"`expr $HR - 12`"
#
#
#
if [ $HR -gt 12 ]
then
echo "$NEWHR:$MIN:$SEC pm"
else
echo "$NEWHR:$MIN:$SEC am"
fi

Last edited by linuxtraining; 03-02-2011 at 09:47 PM.. Reason: left out a $
# 2  
Old 03-02-2011
There needs to be spaces between everything in expr. 3 -12 is invalid, 3 - 12 is okay.

That aside your script can be made a lot better in other ways. You don't need to be doing cut all the time to do simple string processing, that's really slow and difficult.
Code:
#!/bin/bash

T="am"
# One way to split strings
read H M S <<<$(date +'%H %M %S')
# Another:
# STR=`date '+%H %M %S'`
# H="${STR:0:2}"
# M="${STR:3:2}"
# S="${STR:6:2}"

H="${H##0}"     # Strip leading zero

if [[ "${H}" -gt 12 ]]
then
        T="pm"
        H=`expr $H - 12`
fi

# printf makes it easy to put them all back together.
# We print the first one as digits, so it can add a leading zero,
# but the rest we just print as strings.
printf "%02d:%s.%s %s\n" $H $M $S $T

# 3  
Old 03-02-2011
thank you for your reply Corona I get a error
[[: H##0: expression recursion level exceeded (error token is "H##0")
But thank you for taking the time to help. When I run this in debugging mode it shows the H=`expr` to be null value this is a problem that I have been fighting for the last week. I can't get the expr command to realize that it has a value for some reason.

---------- Post updated at 08:17 PM ---------- Previous update was at 08:15 PM ----------

./datt3: line 5: syntax error near unexpected token `<<<$'
./datt3: line 5: `read H M S <<<$(date +'%H %M %S')'
also those two errors are new.
# 4  
Old 03-02-2011
Be sure you entered the code I gave you word for word, letter for letter, keystroke for keystroke.

Are you sure you're using bash? bash is not just any shell.
# 5  
Old 03-02-2011
Yes. I even made sure by doing echo $SHELL and it printed bash.
The school server is a little weird I think they don't have somethings active on it until we get in the 226 class so that maybe the reasoning for the errors we encountered. Thank you very much for all you help though. I'm doing the same problem now using the case statement. ( just because I love writing scripts and Linux)
# 6  
Old 03-02-2011
What does bash --version do.

---------- Post updated at 08:17 PM ---------- Previous update was at 08:16 PM ----------

If you can't use <<< because you have a ridiculously old version of bash, you can do
Code:
date +'%H %M %S' > /tmp/$$
read H M S </tmp/$$
rm -f /tmp/$$

# 7  
Old 03-02-2011
GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)
Copyright 2000 Free Software Foundation, Inc.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Use of tr command to translate after 1st character of each line in a file

Hello, I have an input file contaning following data: < 12345;5454;77;qwert< yuyuy;ruwuriwru> yyyw; > 35353;68686;424242;hrjwhrwrwy< dgdgd; I have first character as '<' or '>'and after that one space is their in each line I just want to replace 1st space encountered after < or >... (3 Replies)
Discussion started by: abhi001cse
3 Replies

2. UNIX for Dummies Questions & Answers

How to translate multiple spaces into a single space using tr command?

I am trying to read a txt file and trying to translate multiples spaces into single spaces so the file is more organized, but whenever I try the command: tr ' ' ' ' w.txt The output is: tr: extra operand `w.txt' Try `tr --help' for more information. Can someone please help? :wall: ... (2 Replies)
Discussion started by: Nonito84
2 Replies

3. Shell Programming and Scripting

expr command help

I'm trying to check if a variable'd string is only one character and use that in an if statement the only way I could find is: $expr "${var}" : . # expr STRING : regrep where the "." is the grep wildcard for any single character. Whats wrong with my code here and is there a... (3 Replies)
Discussion started by: Tewg
3 Replies

4. Shell Programming and Scripting

expr command

Hi Can anyone explain me the usage of this command and the arguments used here and what will be the expected output : v_num=`expr nav_d_20100204_1759 : '*\(*\)'` what will be the value returned in v_num. Thanks in Advance!!! Regards Naveen Purbia (3 Replies)
Discussion started by: trying_myluck
3 Replies

5. Shell Programming and Scripting

Translate decimal into date

Hello, what can I do to convert a decimal number (001-366) into the day of the year it represent in the format of mm-dd-yyyy ? I know about the date +%j, it gives me the number for the current date, what about a reverse of this, is there such a thing? My number resides in a var, what can I do to... (3 Replies)
Discussion started by: gio001
3 Replies

6. UNIX for Dummies Questions & Answers

using the expr command

Hi friends how can i execute expr $va1 * $var2 provided i m not supposed to use '/' also the nglob variable is turned off. (4 Replies)
Discussion started by: ashishj
4 Replies

7. UNIX for Dummies Questions & Answers

expr command

hi guys.... i hava a command expr... where i m adding a value in a loop like Tc=`expr $Tc\+ $l` where Tc is declred as a variable and every time l contains a new vaue if Tc =0 initially and l =2 Tc should be equal to 0+ 2 and then l = 4 Tc = 2+4 and dispaly as 6 but after... (5 Replies)
Discussion started by: madhu_aqua14
5 Replies

8. Shell Programming and Scripting

date=`/usr/ucb/expr $date1 - 1`

Hi I need to subtract one day from date1=`/bin/date +%d` So I used date=`/usr/ucb/expr $date1 - 1` The only thing is if date1 is a single digit like 08, date will be 8 instead of 08. How can I avoid losing 0? Thanks for all your help!!! (4 Replies)
Discussion started by: whatisthis
4 Replies

9. UNIX for Advanced & Expert Users

Translate date value to normal date and backwards.

Hello, How do i translate datevalues in unix to normal dates. and how do i translate normal dates in to datevalues. I'm using the unix-date. Sample: 1067949360 to 4-11-03 12:36 and 4-11-03 12:36 to 1067949360 I want to built a script with a question to the user: give in date... (4 Replies)
Discussion started by: Frederik
4 Replies

10. UNIX for Dummies Questions & Answers

expr command

I am looking for the correct syntax on the expr command in UNIX. I have a script that I am building at the moment. the script is creating file1 that is an actual .sql file that is going inside the oracle database to get some information in there. It take that information, puts it inside another... (2 Replies)
Discussion started by: wolf
2 Replies
Login or Register to Ask a Question