Bash scripting - adding $ to make a variable
Hi,
I'm trying to code the following, which should look like:
test(){
if [ ! -z "$PATH" ]; then
echo PATH=$PATH
fi
test... but haven't been successful so far in in trying to pass "PATH" as a variable to the function.
For instance, just do illustrate what I mean:
test() {
if [ ! -z "$[$1]" ]; then
echo $1=$[$1]
fi
test PATHMaybe this cannot be done?
I was also trying the following, but how to print the word PATH or $PATH
in the function, instead of printing the content of $1 ?
test(){
if [ ! -z "$1" ]; then
echo PATH=$1
fi
test $PATHI guess I could do the following, but perhaps there is another way?
test(){
if [ ! -z "$1" ]; then
echo $2=$1
fi
test $PATH PATHI was also wondering about the "-z" if $1 resolves in a string that is too long. I just want to check if variable $PATH exists.
Any ideas?
Thanks!
Edited by: Dude on Feb 14, 2011 7:36 PM
Thanks very much!
eval is the key. But in order to get what I wanted, I had to change it somewhat. Below functions finally produce the same output. (Thanks to you, I used eval as a search term in Google and found a similar example).
howto() {
if eval [ ! -z "\$$1" ]; then
eval echo $1=\$$1
fi
howto PATH
howto2() {
if [ ! -z "$PATH" ]; then
echo PATH=$PATH
fi
howto2Edited by: Dude on Feb 15, 2011 6:10 AM
Similar Messages
-
Conky doesn't display bash-script variables (array)
I've been playing around with Conky and a bash script of mine. Unfortunately Conky displays only static text and not the array-variables in my script.
In my script:
...some code here...
echo "Static text: ${Variable[1]}"
In my conkyrc:
...some code here...
${exec ~/Test/test.sh}
The result is: "Static text: ". When running the script from the command line everything is fine. I've also tried with exec, execi, execp, texeci to no avail. Any ideas?
Edit: I had to be more specific.
Last edited by chilebiker (2009-10-06 03:30:20)Try echo -n "Static text: ${Variable[1]}"
-
How to send 2 variable value from bash script into java.class
#!/bin/bash
a=10
b=20
echo $a $b | java addition
donehi there,
currently i have a simple java coding ( a + b ). and i m trying to connect with bash script but this bash script coudln't Enter 2nd value (b=20) while i running for it. may i know how do i can Enter 2 value into it?
output from terminal
[seng@localhost java_class]$ bash addition.sh
=======================================================================
simulation 1
Num_a = 10
Num_b = 20
Enter your Num_a : 10
Enter your Num_b : Exception in thread "main" java.lang.NumberFormatException
at java.lang.Integer.parseInt(java.lang.String, int, boolean) (/usr/lib/libgcj.so.6.0.0)
at java.lang.Integer.parseInt(java.lang.String) (/usr/lib/libgcj.so.6.0.0)
at filter_god.GOD(java.util.List, java.util.List, java.lang.String, java.lang.String, int) (Unknown Source)
at filter_god.main(java.lang.String[]) (Unknown Source)
at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0)
at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)
=======================================================================That code will send both numbers on a single line in standard input to the java process. So if the process reads standard input, it will get a single line that has this in it: "10 20".
I'm guessing you're sending that whole line to Integer.parseInt. But a valid number doesn't have a space in the middle.
You should split up the line using String.split. Or use a StringTokenizer. Or a regular expression. Or you can use a java.util.Scanner. Or a java.io.StreamTokenizer. Or maybe some other stuff that has slipped my mind at the moment. -
Bash script doesn't work (Also, help me condense it)...
I am trying to make myself a bash script which combines files together based off of a config file. It is automating combining the audio book tracks I ripped of my CDs into chapters for easier reference. My first problem is that even though I used ', cat still thinks that everything is a separate file. My second problem is that it is way too long, any way I can have it automatically go up 1 chapter until a specified number (ie, until the value of the CHAPTERS variable)? Thanks to those who help.
chapcomb.sh
#!/bin/bash
# * ChapterCombine *
# * By smartboyathome *
# * A script which was made to combine *
# * chapters from ripped audio books *
# * together, but can be edited to *
# * combine just about anything. *
# * The config file is located in your *
# * home directory, under the name *
# * '.chapcomb.config'. If you do not *
# * have this file, create it. *
# * Otherwise this script will not *
# * run, as it won't have the proper *
# * variables. *
# * This can be changed by changing *
# * the CONFIG variable below. *
# * Licensed under: *
# * SmartLicense version 1.0 *
VERSION=0.1
usage() {
echo "Chapter Combine v$VERSION"
echo "A configuration file must be made in order to use this script. Configuration files are located at $CONFIG. This can be changed by adding CONFIG='blah' before this command, or by changing the script directly. See the sample file for how it should look."
while [ "$#" -ne "0" ]; do
case $# in
--help)
usage
exit 0
-h)
usage
exit 0
esac
done
# The config file stuff.
if [ -z "$CONFIG" ]; then
CONFIG="$HOME/.chapcomb.config"
fi
. $CONFIG
cd "$BOOKDIR"
combine() {
# Checks if file exists, and if so, deletes it.
if [ -a $NAME ]; then
rm $NAME
fi
# Combines files
cat $FILES >> $NAME
# Checks to make sure that the chapter combined ok.
if [ -s "$NAME" ]; then
echo "File $NAME is ok."
else
echo "File $NAME had an error and didn't combine. Please fix config file and rerun this script."
exit 0
fi
chapter01
combine
chapter02
combine
chapter03
combine
chapter04
combine
chapter05
combine
chapter06
combine
chapter07
combine
chapter08
combine
chapter09
combine
chapter10
combine
chapter11
combine
chapter12
combine
chapter13
combine
chapter14
combine
chapter15
combine
chapter16
combine
chapter17
combine
chapter18
combine
chapter19
combine
chapter20
combine
chapter21
combine
chapter22
combine
chapter23
combine
chapter24
combine
chapter25
combine
chapter26
combine
chapter27
combine
chapter28
combine
chapter29
combine
.chapcomb.config
# Config file for ChapterCombine
# DO NOT DELETE, OR CHAPTERCOMBINE WILL NOT FUNCTION!
# Book's Directory
BOOKDIR='/media/Home/aabbott/Star Wars Fate of the Jedi Outcast'
# Each chapter's settings.
chapter01() {
# FILES='Outcast\ Disc\ 1/01\ Track\ 1.mp3 Outcast\ Disc\ 1/02\ Track\ 2.mp3 Outcast\ Disc\ 1/03\ Track\ 3.mp3 Outcast\ Disc\ 1/04\ Track\ 4.mp3'
FILES="'Outcast Disc 1'/{'01 Track 1','02 Track 2','03 Track 3','04 Track 4'}.mp3"
NAME='Chapter01.mp3'
chapter02() {
# FILES='Outcast\ Disc\ 1/05\ Track\ 5.mp3 Outcast\ Disc\ 1/06\ Track\ 6.mp3 Outcast\ Disc\ 1/07\ Track\ 7.mp3 Outcast\ Disc\ 1/08\ Track\ 8.mp3 Outcast\ Disc\ 1/09\ Track\ 9.mp3 Outcast\ Disc\ 1/10\ Track\ 10.mp3 Outcast\ Disc\ 1/11\ Track\ 11.mp3'
FILES="'Outcast Disc 1'/{'05 Track 5','06 Track 6','07 Track 7','08 Track 8','09 Track 9','10 Track 10','11 Track 11'}.mp3"
NAME='Chapter02.mp3'
chapter03() {
# FILES='Outcast\ Disc\ 1/12\ Track\ 12.mp3 Outcast\ Disc\ 1/13\ Track\ 13.mp3 Outcast\ Disc\ 1/14\ Track\ 14.mp3 Outcast\ Disc\ 1/15\ Track\ 15.mp3 Outcast\ Disc\ 1/16\ Track\ 16.mp3'
FILES="'Outcast Disc 1'/{'12 Track 12','13 Track 13','14 Track 14','15 Track 15','16 Track 16'}.mp3"
NAME='Chapter03.mp3'
chapter04() {
# FILES='Outcast\ Disc\ 2/01\ Track\ 1.mp3 Outcast\ Disc\ 2/02\ Track\ 2.mp3 Outcast\ Disc\ 2/03\ Track\ 3.mp3 Outcast\ Disc\ 2/04\ Track\ 4.mp3'
FILES="'Outcast Disc 2'/{'01 Track 1','02 Track 2','03 Track 3','04 Track 4'}.mp3"
NAME='Chapter04.mp3'
chapter05() {
FILES="'Outcast Disc 2'/{'05 Track 5','06 Track 6','07 Track 7','08 Track 8'}.mp3"
NAME='Chapter05.mp3'
chapter06() {
FILES="'Outcast Disc 2'/{'09 Track 9','10 Track 10','11 Track 11','12 Track 12','13 Track 13'}.mp3"
NAME='Chapter06.mp3'
# This one needs some special parameters as the chapter is split between two Discs.
chapter07() {
FILES="{'Outcast Disc 2'/{'14 Track 4','15 Track 15','16 Track 16','17 Track 17'}.mp3,'Outcast Disc 3'/{'01 Track 1','02 Track 2','03 Track 3'}}.mp3"
NAME='Chapter07.mp3'
chapter08() {
FILES="'Outcast Disc 3'/{'04 Track 4','05 Track 5','06 Track 6','07 Track 7','08 Track 8'}.mp3"
NAME='Chapter08.mp3'
chapter09() {
FILES="'Outcast Disc 3'/{'09 Track 9','10 Track 10','11 Track 11'}.mp3"
NAME='Chapter09.mp3'
chapter10() {
FILES="'Outcast Disc 3'/{'12 Track 12','13 Track 13','14 Track 14','15 Track 15'}.mp3"
NAME='Chapter10.mp3'
chapter11() {
FILES="'Outcast Disc 4'/{'01 Track 1','02 Track 2','03 Track 3'}.mp3"
NAME='Chapter11.mp3'
chapter12() {
FILES="'Outcast Disc 4'/{'04 Track 4','05 Track 5','06 Track 6','07 Track 7','08 Track 8'}.mp3"
NAME='Chapter12.mp3'
chapter13() {
FILES="'Outcast Disc 4'/{'09 Track 9','10 Track 10','11 Track 11'}.mp3"
NAME='Chapter13.mp3'
chapter14() {
FILES="'Outcast Disc 4'/{'12 Track 12','13 Track 13','14 Track 14'}.mp3"
NAME='Chapter14.mp3'
chapter15() {
FILES="{'Outcast Disc 4'/'15 Track 15','Outcast Disc 5'/{'01 Track 1','02 Track 2','03 Track 3','04 Track 4','05 Track 5'}}.mp3"
NAME='Chapter15.mp3'
chapter16() {
FILES="'Outcast Disc 5'/{'06 Track 6','07 Track 7','08 Track 8','09 Track 9'}.mp3"
NAME='Chapter16.mp3'
chapter17() {
FILES="'Outcast Disc 5'/{'10 Track 10','11 Track 11','12 Track 12','13 Track 13'}.mp3"
NAME='Chapter17.mp3'
chapter18() {
FILES="{'Outcast Disc 5'/'15 Track 15','Outcast Disc 6'/{'01 Track 1','02 Track 2'}}.mp3"
NAME='Chapter18.mp3'
chapter19() {
FILES="'Outcast Disc 6'/{'03 Track 3','04 Track 4','05 Track 5','06 Track 6','07 Track 7','08 Track 8'}.mp3"
NAME='Chapter19.mp3'
chapter20() {
FILES="'Outcast Disc 6'/{'09 Track 9','10 Track 10','11 Track 11','12 Track 12','13 Track 13','14 Track 14'}.mp3"
NAME='Chapter20.mp3'
chapter21() {
FILES="'Outcast Disc 6'/{'15 Track 15','16 Track 16','17 Track 17','18 Track 18','19 Track 19'}.mp3"
NAME='Chapter21.mp3'
chapter22() {
FILES="'Outcast Disc 7'/{'01 Track 1','02 Track 2','03 Track 3','04 Track 4'}.mp3"
NAME='Chapter22.mp3'
chapter23() {
FILES="'Outcast Disc 7'/{'05 Track 5','06 Track 6','07 Track 7','08 Track 8'}.mp3"
NAME='Chapter23.mp3'
chapter24() {
FILES="'Outcast Disc 7'/{'09 Track 9','10 Track 10','11 Track 11','12 Track 12','13 Track 13'}.mp3"
NAME='Chapter24.mp3'
chapter25() {
FILES="{'Outcast Disc 7'/{'14 Track 14','15 Track 15','16 Track 16','17 Track 17'},'Outcast Disk 8'/'01 Track 1'}.mp3"
NAME='Chapter25.mp3'
chapter26() {
FILES="'Outcast Disc 8'/{'02 Track 2','03 Track 3','04 Track 4','05 Track 5'}.mp3"
NAME='Chapter26.mp3'
chapter27() {
FILES="'Outcast Disc 8'/{'06 Track 6','07 Track 7','08 Track 8','09 Track 9'}.mp3"
NAME='Chapter27.mp3'
chapter28() {
FILES="'Outcast Disc 8'/{'10 Track 10','11 Track 11','12 Track 12','13 Track 13'}.mp3"
NAME='Chapter28.mp3'
chapter29() {
FILES="'Outcast Disc 8'/{'14 Track 14','15 Track 15','16 Track 16'}.mp3"
NAME='Chapter29.mp3'kumyco wrote:
for FILES=test/{a,b,c} you may want to do something like
FILES=$(echo test/{a,b,c})
That's a good one. And eval would work with simple examples, but once you have spaces and such in filenames it won't work I think.
If you are going to do this often, then there are too many things that can go wrong with a script that tries to automatically generate the filenames. Even 01* can go wrong.
So if you do have the filenames all in the .conf, then you can replace FILES= with cat and NAME= with >
The actual script doesn't add that much, except checking if it exists (just use > instead of >>) and if it isn't empty (not really necessary) (why did you put a license on that? is that even legal?)
So just use the .conf file as the main script.
Turn this:
BOOKDIR='/media/Home/aabbott/Star Wars Fate of the Jedi Outcast'
chapter01() {
FILES="'Outcast Disc 1'/{'01 Track 1','02 Track 2','03 Track 3','04 Track 4'}.mp3"
NAME='Chapter01.mp3'
chapter02() {
FILES="'Outcast Disc 1'/{'05 Track 5','06 Track 6','07 Track 7','08 Track 8','09 Track 9','10 Track 10','11 Track 11'}.mp3"
NAME='Chapter02.mp3'
into this:
cd '/media/Home/aabbott/Star Wars Fate of the Jedi Outcast'
cat 'Outcast Disc 1'/{'01 Track 1','02 Track 2','03 Track 3','04 Track 4'}.mp3 > 'Chapter01.mp3'
cat 'Outcast Disc 1'/{'05 Track 5','06 Track 6','07 Track 7','08 Track 8','09 Track 9','10 Track 10','11 Track 11'}.mp3 > 'Chapter02.mp3'
Right?
Why would you build anything around that?
If you are sure the filenames are all the same, you can use *
cat *\ 1/*\ {1..4}.mp3 > Chapter01.mp3
cat *\ 100/*\ {70..99}.mp3 > Chapter99.mp3 -
hi,
I am trying to write a little bash script for adding all songs with the same artist as the currently playing song. Here is what I already have:
artist=`mpc -f %artist% | head -n 1`
search=`mpc search artist "$artist" | sed 's|mp3|mp3"|g' | sed 's|ganze|"ganze|g'`
echo $search | mpc add
the sed commands are for enclosing all paths in the list by "
the point is that the last command doesn't work and I don't know why! if I type
echo $search
and copy the the output to the end of mpc add, mpd adds the songs to it's playlist. so my problem here is that mpc doesn't "eat" the content of the search-variable in the pipe. what am I doing wrong????
thx in advancebrisbin33 wrote:
kittykatt wrote:Have you thought of surrounding the $search variable in double quotes in the last line? If there are spaces involved in that variable, then you'll most likely need them.
As far as I know, echo doesn't care about quotes unless you're trying to preserve whitespace at the beginning or end of the line.
# these are equivalent
var='my awesome variable'
echo $var
echo "$var"
# but these you need to be careful
var=' my awesome variable with whitespace '
echo $var
echo "$var"
Touche. It's been a long day for me, unfortunately. Starting to make slip-ups like that. -
Sending email using bash script
Hello:
I am working on writing a bash script to notify one or more users by email of certain events. Run from the Terminal command line, and having the script "echo" text of (what would be) a form letter with in-line variable expansion (i.e., ${VARIABLE}), all seems to work as anticipated. Eventually, I want cron to launch this shell script, and send an email to an "on-subnet" user (I have postfix enabled on my Mac, and there are multiple local user accounts).
I found some stuff on the web about sending mail from bash scripts, and so I made a small little test script, that reads like this:
#!/bin/bash
VARIABLE[1]="The 12,345 quick brown foxes "
VARIABLE[2]="jumped over the 67,890 lazy dogs."
mail -s "a test email" jv << EOF
This is a test:
${VARIABLE[1]}
${VARIABLE[2]}
This is the last line of the test message.
EOF
echo "script completed"
It worked... almost... It sent a local email to my postfix mail account that read like this:
This is a test:
The 12,345 quick brown foxes
jumped over the 67,890 lazy dogs.
This is the last line of the test message.
EOF
echo "script completed"
So, I have two questions. First, the easy one (I hope):
How do I delimit the end of the text, that I want to be the message body of the email, from portions of the script that follow said email text?
Next question is a little more involved. You know how, in Mail.app, if you go to Mail Preferences>Accounts>Account Information, you can put multiple email addresses, comma-delimited, in the "Email Address" field? So, if a person entered "[email protected], [email protected], [email protected]" in this field, then, even though (s)he may be at home, and using their home ISP's mail server, (s)he could send an email apparently from either their home, work, or school email address. Of course, the mail headers clearly would show it came from and through their home machine and home ISP, but it would be displayed in the recipient's Mail client viewer as having come from one of [email protected], [email protected], or [email protected].
I'd like to do something similar here, whereby the email (that is being sent to one or more local users' postfix account on my computer) would apparently be sent from "watchdog@localhost" rather than from "jv@localhost" like it seems to do by default. Whatever account the script is run from (or presumbably, whose cron tab is launching the script) is what the "From" address is set to.
I'd rather not create an additional mail account, because I am using Mac OS X built-in accounts for the postfix mailboxes (I don't want to have to maintain a plaintext username:password file in postfix, and I don't want to create an additional user account on the computer).
So, is there a way to specify an alternate "From" username when invoking the mail -s ${SUBJECT} ${RECIPIENT} command in a bash script? Or is there a different, alternate mail command that will let me do so? (please include a description of syntax and how I'd package the above message text for the alternate method).
Thanks in advance, all!Hi j.v.,
The > after EOF is just a typo (or may be added by the Discussion ?) and you must delete it; other > are prompts from the interactive shell. Andy's post shows an interactive use of shell, not a shell script (note the shell prompt % in front of the commands). A typical use of here document may look like
command <<ENDOFDATA
ENDOFDATA
There must be no spaces before and after ENDOFDATA. The word ENDOFDATA can be EOF or any other string which is guaranteed not to appear in the text (the .... in the example above).
You can modify the From: header by using sendmail command (postfix has it as a compatibility interface):
/usr/sbin/sendmail -t <<EndOfMessage
Subject: test mail
To: jv
From: watchdog
This is a test:
${VARIABLE[1]}
${VARIABLE[2]}
This is the last line of the test message.
EndOfMessage
There must be a blank line between the headers and the mail body.
I assume that you send these mails only to users on your local Mac. Please do not send mails to remote users by using the sendmail command unless you know what you are doing completely.
PowerMac G4 Mac OS X (10.4.5) -
What do you think of my Bash Script? What about the error checking?
Well what do you think of this Bash script
It works
I gave it some problems (i.e. unpluged the ethernet, messed up the URL's, uninstaled some programs...) to see if would report errors and stop or just keep going... But it did
I just kind of thought up a way to do some error checking with the commands that I know.....
What is a better way to do error checking?
What do you think I should add/Do to this script?
#!/bin/bash
# Shell script to make a USB Tumb Drive for Flashing BIOS on a Lenovo Ideapad Y510.
# This script needs to be owned and run as ROOT with the "sudo command"
# i.e. sudo usbbiosflasher
# If you have anyideas send me a PM on ubuntufourms.org my user name is HunterThomson
# Name/Rename this script usbbiosflasher and save it to the ~/home directory.
# Then run the command- chown root:root usbbiosflasher
# Then run the command- chmod 755 usbbiosflasher
# Then copy the script to the directory /usr/bin.
# Run this comand to do that- sudo cp ~/usbbiosflasher /usr/bin
# You also must have the program "mbr" installed
# You can install the mbr program by running this comand in the shell on Ubuntu
# sudo apt-get install mbr
# In Arch Linux you have to get it from Aur
# First you will need to know a few things...
# You will also need to know the Mount Point i.e. /media/disk and the /dev path i.e. /dev/sdb1.
# You can find these by using the df -T comand.
# Run df -T in the shell. Then plug in the USB Thumb Drive and run the df -T comand agin.
# The new listing is the USB Thumb Dirve.
# Also check to make sure the File System tipe is vFAT or FAT16 or FAT32.
# If it is not use gparted to format it to FAT32.
# I am farly certen that all USB Thumb drives come formated with FAT file system out of the BOX.
# You may want to fromat it anyway just to make sure.
echo "Interactive Shell Script to Make a USB Thumb Drive \for Flashing BIOS On a Lenovo Ideapad Y510"
echo ""
echo "You will need to have the program mbr installed"
echo "If you are on Ubuntu Linux you can retreve it form the repositories"
echo "If you are on Arch Linux you will need to get it from the Aur repository"
echo "Open anuther shell and \do that now..."
echo ""
verify="n"
while [ "$verify" != y ]
do
printf "Do you have mbr installed... yes or no?"
read AN1
echo ""
printf "You answered... $AN1 I have installed mbr. Is this correct... y or n?"
read verify
done
echo ""
if [ "$AN1" == "no" ]
then
echo "Install mbr now. Then run this script agin"
exit
else
echo "contunuing script"
fi
echo ""
# The next comand will make a directory to put needed files into. Note this file and everything init will be owned by root.
mkdir ~/usbbiosfiles && check1="yes"
if [ "$check1" = "yes" ]
then
echo "Made directory usbbiosfiles... OK"
else
echo "Could not \make directory usbbiosfiles"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
exit
fi
# The next two comands will get the FreeDOS file and the .ROM file.
cd ~/usbbiosfiles && checka="yes"
if [ "$checka" = "yes" ]
then
echo "Changing to the usbbiosfiles directory... OK"
else
echo "Could not Change to the usbbiosfiles directory"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
wget "http://www.fdos.org/bootdisks/autogen/FDOEM.144.gz" && check2="yes"
if [ "$check2" = "yes" ]
then
echo "Download of FreeDOS... OK"
else
echo "Could not Download FreeDOS"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
wget "http://ubuntuforums.org/attachment.php?attachmentid=78460&d=1216648756" && check3="yes"
if [ "$check3" = "yes" ]
then
echo "Download of the BIOS.ROM \file... OK"
else
echo "Could not Downlad the BIOS.ROM \file"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
# The next comand will name the .ROM file to the right name.
mv ~/usbbiosfiles/attachment.php?attachmentid=78460\&d=1216648756 ~/usbbiosfiles/06CN29WW.bios.update.tar.bz2 && check4="yes"
if [ "$check4" = "yes" ]
then
echo "Renameing of the BIOS.ROM \file... OK"
else
echo "Could not rename the BIOS.ROM \file"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
echo ""
# The next two comands set the variables. DEVX for the path i.e. /dev/xxx and MOUNTX for the mount point i.e. /media/xxx
verify="n"
while [ "$verify" != y ]
do
echo "You will need to know the Mount Point and the dev Path. You will also need to \make sure the File System \type is vFAT, FAT16 or FAT32."
echo ""
echo "With the USB Thumb Drive unpluged, Open another shell and run the comand df -T Then plug \in the USB Thumb Drive and run the comand df -T one \more time. The new device listed is the USB Thumb Drive. Note the Mount Point and The dev Path and the File system Type i.e. vFAT... If the File System \type is not vFAT, FAT16 or FAT32 you will need to fromat it with gparted. You may want to format the USB Thumb Drive anyway just to \make sure. In any \case delete all files and directorys on the USB drive before you go any ferther with this program."
echo ""
printf "Enter the dev path the USB Thumb Drive is at?"
read DEVX
echo ""
echo "Are you sure $DEVX is the dev path of the USB Thumb Drive... y or n?"
read verify
done
echo ""
verify="n"
while [ "$verify" != y ]
do
printf "What is the Mount Point of the USB Thumb Drive?"
read MOUNTX
echo ""
echo "Are you sure $MOUNTX is the Mount Point of the USB Drive... y or n?"
read verify
done
echo ""
install-mbr --enable A1 --partition 1 --force --timeout 0 $DEVX && check5="yes"
if [ "$check5" = "yes" ]
then
echo "Installing MBR on USB Thumb Dirve... OK"
else
echo "Could not install MBR on USB Thumb Drive"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
tar xjf ~/usbbiosfiles/*.tar.bz2 && check7="yes"
if [ "$check7" = "yes" ]
then
echo "Unpacking BIOS.ROM file... OK"
else
echo "Could not unpack BIOS.ROM file"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
gunzip ~/usbbiosfiles/FDOEM.144.gz && check8="yes"
if [ "$check8" = "yes" ]
then
echo "Unpacking FreeDOS files... OK"
else
echo "Could not unpack FreeDOS files"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
mkdir ~/usbbiosfiles/fdoem144 && check9="yes"
if [ "$check9" = "yes" ]
then
echo "Made directory fdoem144 in direcoty usbbiosfiles... OK"
echo ""
echo "Going to \sleep \for 5secs"
else
echo "Could not make directory fdoem144 in usbbiosfiles directory"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
modprobe loop && sleep 5 && check0="yes"
if [ "$check0" = "yes" ]
then
echo "Modprobeing loop... OK"
else
echo "Could not \modprobe loop"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
mount -o loop ~/usbbiosfiles/FDOEM.144 ~/usbbiosfiles/fdoem144 && check10="yes"
if [ "$check10" = "yes" ]
then
echo "Mounting FreeDOS on the fdoem144 directory... OK"
else
echo "Could not \mount FreeDOS on the fdoem144 directory"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
cp ~/usbbiosfiles/fdoem144/* $MOUNTX && check11="yes"
if [ "$check11" = "yes" ]
then
echo "Copying FreeDOS files to $MOUNTX... OK"
else
echo "Could not copy FreeDOS files to $MOUNTX"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
cp ~/usbbiosfiles/*.ROM $MOUNTX && check12="yes"
if [ "$check12" = "yes" ]
then
echo "Copying BIOS.ROM files to $MOUNTX... OK"
else
echo "Could not copy BIOS.ROM files to $MOUNTX"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
sync && check13="yes"
if [ "$check13" = "yes" ]
then
echo "Runing the syncing command... OK"
else
echo "Could not run the syncing command"
echo "look above \for \info"
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this scrip agin"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
rm -r ~/usbbiosfiles
exit
fi
umount ~/usbbiosfiles/fdoem144 && check14="yes"
if [ "$check14" = "yes" ]
then
echo "Unmounting of FreeDOS... OK"
else
echo "Could not unmount FreeDOS"
echo "Look above for errors or problems reported and fix the problem"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this script agin"
rm -r ~/usbbiosfiles
exit
fi
verify="n"
while [ "$verify" != y ]
do
printf "Do you see any errors... yes or no?"
read AN2
echo ""
printf "You answered... $AN2 to errors. Is this correct... y or n?"
read verify
done
echo ""
if [ "$AN2" == "yes" ]
then
echo "User Repoted... Error"
echo "Look above for errors or problems reported and fix the problem"
echo ""
echo "removeing directory usbbiosfiles..."
echo ""
echo "Reformat the USB Stick to FAT32 with gparted"
echo "Fix the problem and run this script agin"
rm -r ~/usbbiosfiles
exit
else
echo "Success"
echo "I did a lot of error checking too and didnt find anything"
echo ""
echo "Go get a pen and paper to write down these instructions"
printf "Then hit the Enter to continue"
read WAIT
echo ""
echo "Now leave the USB Thumb Drive pluged into your computer and Reboot. When the Lenovo Logo POST screen appears hit F2 to enter the CMOS setup utility. Go over to BOOT tab and go down to HardDrive \(Not Boot Order) \then \select the USB Thumb Drive as the 1st hard drve. Then F10 and yes to save changes. Your compter will reboot agin. Then when the Lenovo Logo POST Screen appers on reboot hit F4 to enter the BIOS FLASHING program. The USB Thumb Drive will be seen as the C drive \in the list on the Left, Select it. Then \select the .ROM \file \in the list on the Right and start the BIOS FLASH. \(NOTE Your hart may stop beating... This is normal) Pray to any God you know of and your computer should restart just like normal. Hit F2 and the BIOS will now stay it is 06CN29WW. You will need to \set the boot order to the way you like it and other things \if you need to because they have been changed to the default."
fi
echo ""
echo "End of script"
Last edited by hunterthomson (2008-08-10 11:17:47)Personally..... (this is just how I would have written it - if it works, then it's good enough for me though )
I would change this whole block:
verify="n"
while [ "$verify" != y ]
do
printf "Do you have mbr installed... yes or no?"
read AN1
echo ""
printf "You answered... $AN1 I have installed mbr. Is this correct... y or n?"
read verify
done
echo ""
if [ "$AN1" == "no" ]
then
echo "Install mbr now. Then run this script agin"
exit
else
echo "contunuing script"
fi
To this much shorter code:
MBR='/usr/bin/install-mbr' # Or where ever you expect it to be
if [ ! -x $MBR ] ; then
echo "mbr doesn't appear to be installed."
echo "If it is installed, check it's location, make sure it's executable and then make sure the MBR variable in this script is correct"
exit 1
fi
I wouldn't have used the checkXX variables for each stage:
mkdir ~/usbbiosfiles
if [ $? != 0 ] ; then
#failed
echo "Could not \make directory usbbiosfiles"
echo "look above \for \info"
echo "Fix the problem and run this scrip agin"
exit 1
else
echo "Made directory usbbiosfiles... OK"
fi
There is an issue with the way you do your verifications - the user can never get out unless they answer 'y' or hit CTRL+C. Something like this gives them options:
verify="n"
while [ "$verify" != "y" && "$verify" != "n" ]; do
echo "You need to answer 'y'es or 'n'o"
read verify
echo $verify | tr "[:upper:]" "[:lower:]" # This converts the answer to lowercase so replies entered in upper case will still work
done
if [ $verify != 'y' ] ; then
exit 1
fi
One last thing I try to do in scripts... Declare all your binaries as variables at the start of the program, then execute the binary program by using the variable. For example:
# Binaries
TAR='/bin/tar'
CP='/bin/cp'
CHMOD='/bin/chmod'
# Execute tar and chmod the created file
$TAR cvzf /tmp/tarfile.tar.gz /etc/*.conf
$CHMOD 400 /etc/*.conf
This way, it's easy to change the path in future without having to hunt through the script if the paths change, and it also ensures you're calling the programs using the full paths to make sure you're not executing some strange variant or alias that someone has setup. If I use `chmod` 30 times in a script, and the path changes in the future or on a different system (`chmod` is a bad example cause it's highly unlikely to change, but you know what I mean), then all you need to do is update the variable at the start of the script, and it all works again without having to script-hunt and change it 30 times. -
I am trying to change the color of my CPU temp text in conky to green, yellow or red based on the CPU temp. I am getting this in my conky:
Temperature: color green33
Here is my conky line:
${voffset 1}${goto 40}Temperature: ${font Droid Sans:style=Bold:size=8}${execpi 120 sensors | grep Core0 | paste -s | cut -c15-18 | xargs ~/.conky/colorize.sh}${hwmon 0 temp 1}°C${color}${font}${alignr}
Here is my bash script:
#!/bin/bash
# colorize.sh
COOL=65
WARM=80
if [[ $1 < $COOL ]];
then
echo "color green"
elif [[ $1 > $WARM ]];
then
echo "color red"
else
echo "color yellow"
fi
exit 0
Any help would be greatly appreciated.
ThanksUsing exec(p)(i) makes your conky run heavier, so, why wouldn't you use the built-in conky variables to achieve the same...
I'm using: (before "TEXT")
template2 ${color2}${if_match ${hwmon \1 temp \2}>75}${color orange}${if_match ${hwmon \1 temp \2}>90}${color red}${endif}${endif}${hwmon \1 temp \2}${color1}
and i call them like: (after "TEXT")
Temp ${template2 0 1}/${template2 1 1}/${template2 2 2}/${template2 2 4}
Of course you need to find out what numbers you need to pass to hwmon... -
Multiarchive RAR bash script (SOLVED)
Dear Fellow Archies!
I use the command
rar a -w<working_folder> -m5 -v<max_volume_size> <archive_name> <target_file_or_folder>
whenever I need to make a multiarchive rar file, because I have not yet found a GUI archive manager that does this.
So, I've decided to write a simple bash script to make things easier.
Here's the script:
#!/bin/bash
echo Please, enter the full path to the target file or folder [without the target itself]!
read PATH
echo Please, enter the target filename [with extension] or folder name!
read TARGET
echo Please, enter the desired archive name [without extension]!
read DESTINATION
echo Please, enter the desired volume size in KB!
read SIZE
rar a -w$PATH -m5 -v$SIZE $DESTINATION $TARGET
Executing the last line of the code in terminal works without any hassle. When I run this entire script however, it doesn't.
What needs to be changed for the script to work?
RAR man page is HERE - CLICK, in case someone needs to take a look at something.
Thank you and thank you,
UFOKatarn
Last edited by UFOKatarn (2012-05-03 07:38:28)Done! Working!
Geniuz: Logout-login did it. How simple.
Juster: I added "echo $PATH" to the script and ran it with "bash -x". And the output was the same as after the logout-login. Here it is, in case you are curious.
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl:/opt/qt/bin
Thank you all for your help guys :bow:.
OFFTOPIC:
All who intend to use Xfce launchers to run bash scripts: There are two options in the settings for each launcher: "Command" and "Working Directory". And when I had "Working Directory" filled with "/home/username/", the script didn't work. It worked perfectly after I blanked out the "Working Directory" option. Just so you know, in case someone doesn't .
This has never happened to be before, but still, I guess it is better to do it with blank "Working Directory" and entering the entire path into the script in the "Command" field. It might be that Xfce launchers always stick to the "Working Directory", even though a script might tell them otherwise.
Last edited by UFOKatarn (2012-05-03 07:38:05) -
So I created a simple bash script to run on login.....
one of the commands is the following:
sudo "something something something"....
One thing I haven't learned in my years of Unix is how do you get a bash script to run a sudo command without having to enter a password? I know this is trival, but just a quick 'this is how you do it' would be cool.
Thanks ahead of time on this really dumb question.There's a few ways to do this. Here's two (pick the method you like):
Method 1: Using "askpass".
With this you always do sudo -A command. The -A argument tells sudo to execute a command that echos the password to stdout. That command is something you write. For this explaination let's call the command pw and stick it /usr/local/bin. So it's full pathname would be /usr/local/bin/pw.
sudo -A can get the pathname to pw a number of ways.
1. From the sudoers file.
Use visudo to add the following line to the sudoers file:
Defaults:ALL askpass=/usr/local/bin/pw
2. Using the SUDO_ASKPASS environment variable.
export SUDO_ASKPASS=/usr/local/bin/pw
This might work too (assuming SUDO_ASKPASS has been previously exported):
SUDO_ASKPASS=/usr/local/bin/pw sudo -A command
Method 2: Have sudo read the password from stdin
echo -n password | sudo -S command
The -S option tells sudo to read the password from stdin so echo pipes it in (without the ending newline).
The only relatively secure scheme of these two methods is the askpass (-A) method. At least with that method you have a chance of encrypting/hiding your password down in the command that echoes it to stdout. The -S method would contain your password explicitly in a script somewhere unless you make other provisions to encrypt/hide it with that technique. -
Small bash script as userspace daemon?
Hi!
I have a small bash script that I want to execute every 5 minutes. It's not vital, I'll notice if it stops working soon enough, so I'd like to get it out of my sight (both how it's started and when it's running - especially I don't want cron spamming the journal all the time. If it's convenient, I might try to pipe some assorted output to logger somehow, but that's not important). Now I'm trying to figure out how something like that is supposed to be done...:
I have questions like...:
- Should I modify the script so it has an infinite wait-5minutes-loop itself? And how do I make it break out of the loop if the service-handle-thingy tells it to / does it have to react to environment variables from something?
- Should I create a service file for systemd or what is supposed to handle such "pseudo userspace daemons"? While I found information on how to create the service files, I couldn't really figure out how the script behind it should look...
- Also I'm not sure if "daemons" should be executed as root and use sudo or something to do userspace stuff... or if the whole thing should be started as user.
I found only obsolete looking information on all of those things and examples that are specific to other distributions (saw lot of "start-stop-daemon" - I guess that's debian or something, not archlinux...?). So: Could someone please bump me into the general direction of the stuff I need to use / read?
Thanks!whoops wrote:
Thanks!
Phew, that was a lot of stuff... browsed many examples too... and in the end it looks like the crontab was the "right" place to put that thing after all, everything else just seems like a "dirty" or overkill solution in comparison...
The only thing that still irritates me is cron insisting to write every single freaking *success* into the logs (/journal) instead of just warnings / errors. I really don't need that thing telling me: "Hi, I'm still OK! " every other minute -.- but there does not seem to be an option (other than installing a syslog-daemon capable of "blacklisting" the entries as a workaround) to shut it up... which was the reason why I first thought that scripts which are to be executes so often don't belong into the crontab.
Hmm... not sure what to do yet. Is there anything else I should know / read before I make up my mind and stop looking for a better solution to this?
Which cron do you use? I have dcron installed and it has a log level setting - see man crond -
???? how to launch bash script in cron ????
with help from people in this forum, I successfully debugged the syntax in a shell script I wrote (my syntactical faux pas had to do with sending a multi-line mail message from a bash script).
I can manually launch my script from Terminal's command line, and it works perfectly (well, at least it does exactly what I told it to do:). I try to launch it via cron, and it doesn't appear to ever launch.
In /var/cron/tabs/root, the pertinent line of text reads:
00 22 * * * /usr/local/customShellScripts/script.sh
so it is supposed to launch daily at 10PM.
Other jobs listed in /var/cron/tabs/root do run, because I get emails to my postfix admin account saying that they do. However, none of those other jobs are shell scripts; they are stuff like:
24 06 * * 5 /usr/sbin/diskutil verifyVolume /
The directory listing for /var/cron/tabs/root reads:
$ ls /var/cron/tabs
total 4
drwxr-xr-x 3 root wheel 102 Mar 25 18:53:28 2006 .
drwxr-xr-x 3 root wheel 102 Mar 20 17:13:47 2005 ..
-rw-r--r-- 1 root wheel 1040 Mar 31 20:28:10 2006 root
The directory listing for script.sh reads:
$ ls /usr/local/customShellScripts/
total 24
drwxr-xr-x 6 root wheel 204 Mar 31 18:31:27 2006 .
drwxr-xr-x 11 root wheel 374 Mar 5 12:26:23 2006 ..
-rw-r--r-- 1 root wheel 6148 Feb 4 14:13:22 2006 .DS_Store
-rwxr-xr-x 1 root wheel 8058 Mar 31 20:27:50 2006 script.sh
for debug, the first two lines of script.sh read:
#!/bin/sh
/usr/bin/touch /foo
but the file /foo never gets created. I tried using just "touch /foo" and that didn't work either.
Also, since the script has a lot of calls to "echo," "expr," "date," "cut," "awk," etc., if I ever get cron to execute the script past the shebang line, do I have to preface all those calls with their full path? Or can I do something like in the old /etc/crontab file, where they defined a path variable up front
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
and the script will be smart enough to look in those directories for the appropriate executables?
But, getting back to the first problem, I am obviously overlooking something very basic, which is not surprising since I'm self-taught (and I guess, Apple Unix Discussions forum taught) at this unix thing and shell scripting. So, can anybody bail me out here...again?
2001 Quicksilver G4 Mac OS X (10.4.5)Hey Reese
You bailed me out, dude! Apparently, my difficulties stemmed from me trying to directly edit /var/cron/tabs/root with pico. Never seemed to bother the other stuff, but it did this time. I am totally inept with vi, the default editor for crontab -e, which is why I had cheated before, and directly edited the /var/cron/tabs/root, el.al., so I had to find out how to
export EDITOR='pico'
in my .bashrc
After having done that, no problem, except for a latent programming logic bug that has reared its ugly head (my script is doing some date manipulation with today's and yesterday's date, and my script crashed and burned on the month change and with stuff related to single-digit date sequence numbers <10).
But, hey, I learned how to reset my default editor, so as to make life easier for me when it comes time to dorking with crontab files, and I learned that when the crontab file says "DO NOT EDIT THIS FILE - edit the master and reinstall," it means it!
Thanx for the troubleshooting hint. -
[DONE] Bash scripting. A few questions
Hi,
I've created my own custom sleep script as it is described here: https://wiki.archlinux.org/index.php/Sy … stem-sleep and it's already working correctly.
However I've got a few questions concerning bash scripting since I've never did it before.
Here the example from the wiki:
#!/bin/sh
case $1/$2 in
pre/*)
echo "Going to $2..."
post/*)
echo "Waking up from $2..."
esac
Now what do I need the /*) for in the cases pre and post? What does it do? And why isn't there any *) in the end which would exit the script if none of the above is true?
Secondly, why does it say case $1/$2 in, but not case $1 in, what is the $2 needed for? E.g. in this script only $1 is used: https://wiki.archlinux.org/index.php/OS … ibernation
And third question is, if I do really need the double quotes around $1? Does it make any difference?
Sorry for my incompetence but I'm not a dev and as I already said I've never did any bash scripting...
Thanks in advance
best regards
nuc
Last edited by nuc (2013-02-07 18:10:56)ok, here's my actual code:
#!/bin/sh
suspend_osssound()
/usr/lib/oss/scripts/killprocs.sh
/usr/sbin/soundoff
resume_osssound()
/usr/sbin/soundon
case "$1" in
pre)
suspend_osssound
post)
resume_osssound
*) exit $NA
esac
It is the same as the one in the OSS wiki entry, but slightly configured to work under logind and not pm-utils. Of course the new location is /usr/lib/systemd/system-sleep/.
I'm about to update the wiki with my code, so I'd like to know if there aren't any major mistakes. I tested it and it works but I want to get sure
PS: Do people actually still use pm-utils for suspending or can I safely remove the previous script from the wiki?
EDIT: Added double quotes
Last edited by nuc (2013-01-25 23:42:02) -
[solved]Need help with a bash script for MOC conky artwork.
I need some help with a bash script for displaying artwork from MOC.
Music folders have a file called 'front.jpg' in them, so I need to pull the current directory from MOCP and then display the 'front.jpg' file in conky.
mocp -Q %file
gives me the current file playing, but I need the directory (perhaps some way to use only everything after the last '/'?)
A point in the right direction would be appreciated.
thanks, d
Last edited by dgz (2013-08-29 21:24:28)Xyne wrote:
You should also quote the variables and output in double quotes to make the code robust, e.g.
filename="$(mocp -Q %file)"
dirname="${filename%/*}"
cp "$dirname"/front.jpg ~/backup/art.jpg
Without the quotes, whitespace will break the code. Even if you don't expect whitespace in any of the paths, it's still good coding practice to include the quotes imo.
thanks for the tip.
here it is, anyhow:
#!/bin/bash
filename=$(mocp -Q %file)
dirname=${filename%/*}
cp ${dirname}/front.jpg ~/backup/art.jpg
then in conky:
$alignr${execi 30 ~/bin/artc}${image ~/backup/art.jpg -s 100x100 -p -3,60}
thanks for the help.
Last edited by dgz (2013-08-29 21:26:32) -
Bash script user input and revision technique requested
In a bash script, I have a need to present the contents of a variable to the user, so that he can "revise" the value if needed, or just hit enter if no revision is required. The objective is to reduce keyboard effort to just revising a presented value.
The "hit enter to continue" part is easy.
The "revise" part is the problem for me.
To illustrate using an example:
#! /bin/bash
position_var=30.39
echo -n "Revise Position if required:${position_var}"
#then some kind of read position_var ??
How can I make the position_var available to the user to edit and resubmit?
Thanks
steve.
Last edited by stevepa (2012-02-28 17:31:56)The above solution is good okay for a general shell script, bash has a feature for what you want though. (see below)
If however the content of the variable is bigger (multiple lines, or a really LONG line you don't want to have to retype), you have 2 options:
Write it to a temp file and fire up $EDITOR (if that's not set, you can default to nano or vi, whichever you can find with $(which ...)).
The other idea that comes to mind is using 'expect' to present a prefilled prompt the user can edit... I'll have to test this...
EDIT: Can't think of an easy way to do that with expect... mhh...
EDIT2: Specifically for bash:
read -p "Revise Position if required: " -i "$current" -e new
with the -e flag, $current will be what the line is prefilled with, and $new will contain the result.
Last edited by Blµb (2012-02-28 18:14:55)
Maybe you are looking for
-
After creating successor to a custom IDOC?
Hello We have a custom IDOC type (for sales orders) in the system. Now business want to pass additional data, as per this requirement am trying to add a new custom segment to this custom IDOC, but am getting the below error, ZORDR03 has already been
-
Is there any way to get an older version of the app that can be compatible or to "copy" the app from one iPod to the other? Or maybe to update the opperating system??
-
Create a report based on another
Hi, i've following question. I have a report A composed by an union of two queries. Example: Select X,Y from Subject Area UNION Select W,Z from Subject Area Is possible create another report which select any fields of the report A? Example: Select Y,
-
Satellite Pro NB10-A-10 PU143E - How to install Win 7
Hi, we have recently purchased the above netbook, which came pre-installed with Windows 8.1 pro. I want to install install Windows 7 on the computer. Intially when I looked in the bios there wasn't the option for CSM, So I updated the bios, and now I
-
Hello, I am doing a senior project for my high school. My project will include a Java program which I will write. I will be needing a long term mentor, for possibly a very long time (up to a year). I know this seems like an amazing commitment but I w