I have a bash script executing on an AIX server to a windows share directory to update a windows text file. Most of the file is edited as expected but I have 3 issues that I am not sure how to resolve.
1. Windows text file contains a double backslash (\\) and the \\ is being written back as a single \ which corrupts the file.
2. I am not getting the last line of text in the file written back out.
3. Some lines of text are not written back out completely.
Here is a snippet of my bash script:
cp $Directory/Somefile $Directory/Somefile.$(date +'%Y%m%d')
cat /dev/null > ${HOME}/temp.out
while read -r inpLine; do
patternFound=n
echo ${inpLine} | grep -q 'SOMEPATTERN='
if [ $? = 0 ]; then
patternFound=y
echo "##${inpLine}" >> ${HOME}/temp.out
echo "SOMEPATTERN=newValue" >> ${HOME}/temp.out
fi
if [ ${patternFound} = "n" ]; then
echo ${inpLine} >> ${HOME}/temp.out
fi
done < $Directory/Somefile
mv ${HOME}/temp.out $Directory/Somefile
This is my script and the syntax to run this script is give ip and next will be the file or script you want to perform on remote server
#!/bin/bash
# The private key used to identify this machine
IDENTITY_KEY=/home/adnew.pem
syntax()
{
echo "Syntax: Ec2.sh server_ip scriptFile]"
echo "For example: ./Ec2.sh server_ip scriptFile"
exit 1
}
if [ $# -ne 2 ]
then
echo not enough arguments
syntax
fi
echo "Running script $2 on $1"
ssh -ttq -i $IDENTITY_KEY ec2-user@$1 sudo -i 'bash -s' < $2
exit
exit
echo "Done"
on script file i have give for testing
touch /root/test
ls /root/test
exit
exit
it makes the file but do not show the ls output by giving error
tcgetattr: Inappropriate ioctl for device
exit
what I have to do ??
Apologies. I've been out of Unix for 14 years, and the gears have rusted. Also, Unix has changed - enough similarities to memory that I'm pretty comfy though.
Glad to see lots of info available via google. However changes are going to take getting used to. Have set up a testbed of 3 nearly identical machines, hoping to make an (at home) private network where I can automate installs and set-ups using NIS and NFS (Similar to work I once did).
Have found useful scripts interspersed with comments, would like to copy and paste them to a bash script that:
Reads the line.
Echos the line.
Reads the reply.
Executes what is typed.
Essentially, by making myself type (or copy & paste) the commands I think I'll become familiar.
Figured I'd use a spreadsheet, select the file, and paste into column B of the spreadsheet. In column A I'd paste:
echo "
and in column C I'd paste:
"
Then I'd cut and paste into a text document, insert the lines:
read A
$A
behind every command necessary to the actual task.
Figured I'd have to escape the ' and ".
Ran a test (test.bash):
#!/bin/bash
for i in `seq 1 10`;
do
echo "Enter a command:"
read A
echo "Trying $A"
$A
done
works fine when I type
ls -alg
but not so when I type
ls -alg | grep dwrx
so I'm wondering if someone has a suggestion?
Thanks for any ideas.
Hello,
I am setting up a linux server for gaming and I am using a script to update the files automatically and create a folder with a certain name.
Code:
# !/bin/bash
# A convenience function, to save us some work
update_server() {
# Read the app id and the directory into a variable
APP_ID=$1
DIR=$2
# Create the directory ( if it does not exist already )
if [ ! -d "$HOME/$DIR" ]; then
mkdir -p "$HOME/$DIR"
fi
# Uh-oh, it looks like we still have no directory. Report an error.
if [ ! -d "$HOME/$DIR" ]; then
# Describe what went wrong
echo "ERROR! Cannot create directory $HOME/$DIR!"
# Exit with status code 1 ( which indicates an error )
exit 1
fi
# Call SteamCMD with the app ID we provided and tell it to install
./bin/steamcmd.sh +login anonymous +force_install_dir "$HOME/$DIR" +app_update $APP_ID validate +quit
}
# Now the script actually runs update_server ( which we just declared above ) with the id of the application ( 4020 is Garry's Mod ) and the name of the directory we want the server to be hosted from:
update_server 4020 "gmodserver"
exit 0
When I run this script, it creates 2 folders on my server : gmodserver and gmodserver? There is no files downloaded in gmodserver. All the files are downloaded in gmodserver?
I looked for a few hours on how to solve this problem but I have no idea what the added ? might be so I am lost as to what to look for. Could you help me on figuring this out?
Thank you.
edit : I am using ubuntu 15.04 x64 if it makes a difference.
Ok yes this is a homework assignment BUT I am NOT looking to have the answers given to me. I am in the 6th week of my first Linux class ever and we are in our few weeks of beginning scripting. I have some ideas of what to do or where to start but not many and no one to bounce any ideas off...we are using UNIX Bash shell so any others I have no clue. The scenario is that I need a script that searches all my users home directories for bad words. I need the script to report to the screen certain info like username and word found and path. It should ask a user if it is good or bad and if bad be put into a file of list of bad file names, if good remove from list and no longer flagged by the script. What I have so far is wanting to somehow do a loop. I do know that if I do a grep -r -e kill -e steal /home/* I get a list of what I need. I also know that the list is separated by delimiters which I can pipe to get a variable for the things I need. I also know that I can put it to a file with a > filename.txt
What I have no clue is how to start a loop that would do this...
for each line in filename.txt
UNAME=...
LOC=...
TXT=...
echo "Username: $UNAME, Line with bad word found: $TXT, and Path and file name: $LOC. Is this a BAD file? (Y)"
Read YORN
if ["$YORN" = "Y" ]; then
>> (line of text from grep) badfiles.txt
fi
Next or whatever goes there...sorry if this is crazy I just really need some direction. I am trying to learn so please don't give me the answer...that will do nothing for me and I will not be able to explain the code I came up with.
Hello,
I'm working on a shell script that needs to read the a file (file1) a batch (read 2000 lines at a time) and then write those lines to seperate file which I'm using to run ldapmodify command. I need to check some other file size and once this file less than 200kb, i would need to run second batch and so on until file1 is empty.
Quote:
#!/bin/bash
set -x
filesize=200
server=10.11.xxx.xx
filename=fileimport.txt
taofile1=687686.txt
taofile=/var/opt/$taofile1
stty -echo
echo -n "Enter password: "
read passwd
stty echo
context="cn=user1,ou=org1,ou=org2,o=org"
if [[ -s "$filename" ]];then
for lines in $filename
do
head -99997 fileimport.txt >> ldapreadd.ldif && sed -i '1,+99996d' fileimport.txt
if [ -s ldapreadd.ldif ];then
ldapmodify -h $server -p 389 -D $context -w $passwd -v -x -f ldapreadd.ldif &> /dev/null
echo "LDIF script is running. Please wait..."
sleep 60
if [ -f "$taofile" ];then
taofilesize=`stat -c %s ${taofile}`
# if [ "$taofilesize" -ge 200 ];then
while [ `stat -c %s ${taofile}` -ge 200 ]
do
echo " Driver is processing LDIF file. Please wait..."
sleep 60
done
fi
rm -rf ldapreadd.ldif
fi
done
else
echo "$filename file is empty. Exiting script..."
exit
fi
I have 2 issues here. first one script is not reading exact lines as specified. Some times its reading more lines some times less lines. Second issues once it run the first batch, script is exiting. Please advise.
Hello,
I apologize in advance for my limited UNIX scripting knowledge. I am new to it and really want to learn.
I am trying to write a bash script that updates a config file based on user input.
What is the best method for accomplishing this? I need it to prompt the user for two variables, find the location in the config file, and insert new text with the two variables.
I was thinking I could use sed to find the text in the config file where the new text must be inserted before and replace it with the new text, two variables, and same ending text as before. Example:
echo "1st variable?"
read variable1
echo "2nd variable?"
read variable2
sed -e "s|<the spot in the config file that needs new config>|sometext...$variable2_somemoretext...$variable1\n<the spot in the config file that needs new config>|g" config > config2
This works except variable2 is not inserted into the replace string, only variable1 is. This is the result in config2:
sometext..._somemoretext...$variable1
<the spot in the config file that needs new config>
If anyone can tell me why variable2 isn't working in the sed replace string, or if there's a much better way for accomplishing what I'm after, I'd appreciate any help I can get.
When I run the .cmd file in the cluster I am getting an error message as
/bin/bash: : No such file or directory
The below is the PBS script in the .cmd file
#! /bin/bash
#PBS -o logfile.log
#PBS -e errorfile.err
#PBS -l cput=740:00:00
#PBS -l select=2:ncpus=8
tpdir=`echo $PBS_JOBID | cut -f 1 -d .`
tempdir=$HOME/work/job$tpdir
mkdir -p $tempdir
cd $tempdir
cp -R $PBS_O_WORKDIR/* .
fluent 2ddp -g -t16 -pib -cnf=$PBS_NODEFILE -ssh -i srik.jou >> out
mv ../job$tpdir $PBS_O_WORKDIR/.
Please help me to figure out the problem.
Hi Everyone,
I need some help on my bash script, I'm trying to rename a certain line in a file which might be 1 or more.
IDXCOUNT=`grep -c 'index .* on ' $FILENAME`;
for n in $(eval echo {1..$IDXCOUNT});
do
timestamp=$(date +"%s");
echo "Renaming index idx_$timestamp..";
if [ $n -eq 1 ]; then
sed -i "0,/^index [^)]* on /s/index idx_$timestamp on /" $FILENAME;
My problem is, if the sed target is 2 or more it will generate an idx_$timestamp that will cause duplicate index value when the script finish. My goal is to have the script recognize that when there are multiple index in the file, it will try to rename it one by one.
I'm new to bash so I'm not sure if I explained my issue well but I will appreciate any help!!
Thanks!
Hi all,
I am trying to write a script that syncs files from source to destination. I have one centralized server that can ssh to any servers without pw. Now when I run the script, it can ssh to source server perfectly fine, but you need to enter password for destination server. Was wondering how I can clean this up before I start using case statements
Below is a sample I wrote
#!/bin/bash
#This scripts syncs shit
echo "Type in ID: "
read ID
echo "Type in Server : " #source server
read S
echo "Type in Destination Server: "
read DS
if [ $S == 9 ]; then
ssh -t "root@"$S"webserver1" "rsync -av /home/rlui/"$ID "root@"$DS"webserver2:/home/rlui/";
ssh -t "root@"$S"webserver1" "rsync -av /home/rlui/tmp/"$ID "root@sl"$DS"webserver2:/home/rlui/tmp/"
exit 1
where S and DS are cluster numbers
I apologize in advance if I am not clear on anything
I have many hosts as following. But those hosts are dual operating system (Linux and Windows). I always run program background. If someone is using Linux, it is fine. But if someone is using windows or the host is offline. Then, I cannot use ssh. The way I do preiviously is first ssh one by one. And then find the hosts which are offline or windows. And write them down one by one. And then ssh to hosts except them. Let us assume the number of programs is less than the total available hosts. Can someone write a shell script to output the all available hosts to a file like "host_available"?
Here is the host file.
https://www.dropbox.com/s/vbz6w864y3...tlist.txt?dl=0
I am using ssh to connect the computers on campus. If the computer I am trying to connect is offline or using windows, the ssh will take long time, and finally it will failed. I write a shell script to generate the hostlist
Code:
#!/bin/bash
for i in `seq -w 1 28`
do
echo "c15-0330-$i.ad.mtu.edu"
# I would like to add a command here to see whether ssh c15-0330-$i.ad.mtu.edu it succeeds or not. And then output a #file which contains the all available host.
done
for i in `seq -w 1 20`
do
echo "c28-0112-$i.ad.mtu.edu"
done
for i in `seq -w 1 20`
do
echo "c28-112a-$i.ad.mtu.edu"
done
I do not how to set a certain time to see whether connection is successful or not (see the comment in the shell script).