Shell学习 待完善
Hello Worldcd C:\Program Files\Git\bin
1. Windows下编写sh脚本
直接新建 shell.txt,然后修改后缀名为.sh,同时,将文件换行格式改为 unix(Editplus :文档-〉换行格式)
#!/bin/bash
echo "run test"
#makefile
make
file="test.lxe"
if [ -e $file ]
then
echo "exist"
./test.lxe
else
echo "not exist"
fi
2. 根据端口号获取进程PID并杀死进程,然后重启进程
- 获取PID
#!/bin/bash
# first param is port
port=$1
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
if [ $? -eq 0 ]
then
echo "port pid:$pid"
else
echo "port $port not exit"
exit
fi
命令解释:pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
netstat -nlp
:获取所有进程信息
grep :$port
:删选指定行
awk '{print $7}'
:PID在第7列,获取该行指定列
awk -F"/" '{ print $1 }'
:获取PID值
- 重启
#!/bin/bash
# first param is port
# 获取pid
function exit_script() {
exit 1
}
#判断输入参数
if test $# -eq 0
then
echo "please inport port"
echo $?
exit_script
fi
port=$1
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
if [ $? -eq 0 ]
then
echo "port pid:$pid"
else
echo "port $port not exit"
fi
#杀死进程
if [ -n "$pid" ];then
echo "ready to kill"
kill -9 $pid;
fi
#未发生错误时
if [ $? -eq 0 ]
then
echo "kill success"
fi
sleep 5
# 重启进程
if test $port -eq 9002
then
cd /home/hust/jars/zuul
nohup java -jar zuul-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &
fi
if [ $? -eq 0 ]
then
echo "restart success"
fi
- 使用cd 命令时 启动shell方式如果为 . ./shell.sh(注意,…之间有空格)
采用这种方式执行时,如果shell.sh 退出的话,也会把putty终端也退出去了,这是因为source和..
不是直接执行一个文件,而是从一个文本文件里面读命令行,然后执行这些命令。
3. 复制文件夹内容并cd到复制后的文件内执行程序
- 复制文件夹内容
#!/bin/bash
# first param is user
function exit_script() {
exit 1
}
#判断输入参数
if test $# -eq 0
then
echo "please inport user"
echo $?
exit_script
fi
user=$1
#判断是否存在该用户的文件夹,不存在则新建,并复制程序相应内容
#拼接路径
basepath=$(cd `dirname $0`; pwd)
userpath=""$basepath/""flowd$user/""
#判断文件夹是否存在
if [ ! -d $userpath ]
then
#复制文件夹内容,先创建文件,注意cp语句
mkdir $userpath
cp -a /home/hust/jars/flowd/flowd/. $userpath
fi
4 .开机自动启动服务
- 开机启动后需要执行shell 脚本
#开启自启动服务脚本,对应的脚本文件为 /jars/sh./updateport.sh
cd ~/jars/sh
./updateport.sh 8761
./updateport.sh 9001
./updateport.sh 9002
./updateport.sh 9010
./updateport.sh 9011
./updateport.sh 9012
- 执行命令
chmod +x 脚本.sh
修改脚本执行权限 - 将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。
备注:
采用上面的步骤2 3 时,发现每次用putty 远程连接时都会自动执行脚本,而不是一开始的开启启动,原因未明,故采取下面的方式
一、/etc/rc.local
这是一个最简单的方法,编辑“/etc/rc.local”,把启动程序的shell命令输入进去即可(要输入命令的全路径),类似于windows下的“启动”。
使用命令 vi /etc/rc.local
然后在文件最后一行添加要执行程序的全路径。
例如,每次开机时要执行一个haha.sh,这个脚本放在/opt下面,那就可以在“/etc/rc.local”中加一行“/opt/./haha.sh”,或者两行“cd /opt”和“./haha.sh”。
5 给文件夹赋予写权限
在写日志时,出现了写的目录权限不够的问题,原因是该目录的权限不够,通过下面命令修改目录权限
chmod -R 777 /usr/share/
将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :
chmod -R lamport:users *
-rw------- (600) – 只有属主有读写权限。
-rw-r–r-- (644) – 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) – 只有属主有读、写、执行权限。
-rwxr-xr-x (755) – 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx–x--x (711) – 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) – 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) – 所有用户都有读、写、执行权限。更不可取的做法。
以下是对目录的两个普通设定:
drwx------ (700) - 只有属主可在目录中读、写。
drwxr-xr-x (755) - 所有用户可读该目录,但只有属主才能改变目录中的内容。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)