Shell学习 待完善

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并杀死进程,然后重启进程

  1. 获取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值
在这里插入图片描述

  1. 重启
#!/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
  1. 使用cd 命令时 启动shell方式如果为 . ./shell.sh(注意,…之间有空格)
    采用这种方式执行时,如果shell.sh 退出的话,也会把putty终端也退出去了,这是因为source和..不是直接执行一个文件,而是从一个文本文件里面读命令行,然后执行这些命令。

3. 复制文件夹内容并cd到复制后的文件内执行程序

  1. 复制文件夹内容
#!/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 .开机自动启动服务

  1. 开机启动后需要执行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
  1. 执行命令 chmod +x 脚本.sh 修改脚本执行权限
  2. 将写好的脚本(.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) - 所有用户可读该目录,但只有属主才能改变目录中的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值