shell 脚本

nohup java -jar module_config.jar >config.log 2>&1 &

& 放在命令到结尾,表示后台运行,防止终端一直被某个进程占用,这样终端可以执行别到任务,配合 >file 2>&1可以将log保存到某个文件中,但如果终端关闭,则进程也停止运行。如 command > file.log 2>&1 & 。

nohup放在命令的开头,表示不挂起(no hang up),也即,关闭终端或者退出某个账号,进程也继续保持运行状态,一般配合&符号一起使用。如nohup command &。
2>&1 >file :错误输出到终端,标准输出重定向到文件file,等于 > file 2>&1(标准输出重定向到文件,错误重定向到标准输出)。

 

 

执行shell文件的四种方式的区别

假如有一个文件test.sh,脚本内容如下
#!/bin/bash
echo "step 1 sleeping"
sleep 200
echo "step 2 sleeping"
sleep 200

那么,现在按以下4种方式执行:
1)./test.sh
2)sh test.sh
3). test.sh      注意:点后有空格
4)source test.sh

前两种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关
    闭,然后又回到父shell中。而方法三、四则是在当前shell中执行的。执行过一次后,变量就会保留下来!

他们有何区别?
1)第一种方式,是在当前的shell执行脚本本身,也就是说把test.sh当成一个文件执行,这时候我们需要拥有test.sh的运行权限(x权限),而且当我们在执行此命令时,
    有2个新进程在运行,一个是test.sh,一个是sleep,如果我们在执行第一个sleep时按ctrl+c终止脚本,test.sh和sleep一起终止,并且第二个sleep不会执行,因为
    整个test.sh运行已经终止。
    
2)第二种方式,是新建一个shell执行test.sh脚本里面的命令,不需要执行权限,有读取权限(r权限)即可,在执行此命令时,有2个新进程在运行,一个是bash,一个
    是sleep,如果执行第一个sleep时按ctrl+c,bash被终止,结果和第一种方式一样,第二个sleep不会执行。
    
3)第三种方式,是在当前shell执行test.sh里面的命令,不需要执行权限,有读取权限(r权限)即可,在执行此命令时,只有一个新进程在运行,就是sleep,如果在执
    行第一个sleep时按ctrl+c终止,那么第二个sleep接着运行,直到脚本所有命令执行完。

4)第四种方式和第三种方式一致。.命令和source是同一个命令,可以理解为source的缩写,简称点命令。

执行了source test.sh 最为重要的一点是:
脚本里的所有变量函数等都在当前shell环境中了,比如脚本里写了函数func1,func2
你在终端里输入fun,然后按TAB点回车,可以像命令一样提示func1,func2

所以用shell时,一定要注意,是另开了一个shell还是就是当前的shell环境变量,注意环境变量是否改变了!!

关于shell里的函数,先定义还是先使用的问题:

{
[root@vx1824 ~]# cat test.sh 
#!/bin/bash
function func1 {
        echo "111111"
        func2
}

func1

function func2 {
        echo "222222"
}
直接执行脚本文件,会报错:因为你在脚本文件里直接调用了func1,执行func1的时候会找不到func2。
解释型语言,在文件里从上到下一行一行解释来的嘛
[root@vx1824 ~]# sh test.sh 
111111
test.sh: line 4: func2: command not found

但是如果只是,
[root@vx1824 ~]# source test.sh 
111111
bash: func2: command not found
[root@vx1824 ~]# 
[root@vx1824 ~]# source test.sh 
111111
222222

第一次执行source test.sh会报错,但第二次执行就不会报错了,因为source是在当前终端里,第一次执行了后变量就都存在了当前shell环境中。所以第二次就可以找到了
然后,后面就可以直接在终端里像命令一样执行:func1

 

shell中如何比较

n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2

 

 

awk sort uniq sed  这几个命令一定要搞懂!!

cat messages | grep 'conn free' | awk '{print $15}' | sort | uniq -c | sort -n
messages里的日志信息,频繁打印conn alloc和conn free
Sep 19 06:57:19 localhost kernel: [ISCSI_INFO] conn alloc,sid:0x7a7d46119167c380 target:iqn.ec.16ed153800000014.1d91bd3b00000001.576bb166 initiator:ecinitiator.16ed153800000014.576bb166 10.41.100.39 172.18.35.195
Sep 19 06:57:26 localhost kernel: [ISCSI_INFO] conn free, sid:0x7a76bc324fd8f180 cid:0 target name:iqn.ec.16ed1538000002e9.1d91bd3b00000001.576cbb1f tid:327 10.41.100.39 172.17.37.188
Sep 19 06:57:29 localhost kernel: [ISCSI_INFO] conn alloc,sid:0x7a7ebc324fd8f180 target:iqn.ec.16ed1538000002e9.1d91bd3b00000001.576cbb1f initiator:ecinitiator.16ed1538000002e9.576cbb1f 10.41.100.39 172.17.37.188
Sep 19 06:57:31 localhost kernel: [ISCSI_INFO] conn alloc,sid:0x7a7f46119167c380 target:iqn.ec.16ed153800000014.1d91bd3b00000001.576bb166 initiator:ecinitiator.16ed153800000014.576bb166 10.41.100.39 172.18.35.195
Sep 19 06:57:34 localhost kernel: [ISCSI_INFO] conn free, sid:0x7a5746119167c380 cid:0 target name:iqn.ec.16ed153800000014.1d91bd3b00000001.576bb166 tid:95 10.41.100.39 172.18.35.195

执行这样的命令,输出结果:就可以知道那个IPC为什么反复的session free
    185 172.17.117.188
    196 172.17.117.185
    196 172.19.245.185
    205 172.19.245.187
    218 172.19.245.186
    227 172.19.245.188
    233 172.17.34.185
    290 172.17.37.188

 

sed '1,3d'       # 删除第1至3行
sed 's/\r//g'    # 出去\r符号,避免windows里的换行符\r\n的影响
Windows下换行符号是“\r\n”,而linux下是“\n”没有”\r”,当shell文件是在Windows下编写的时候,所有的换行符都是“\r\n”,shell下是没办法执行这个文件的,会提示以上错误。
请在ultraedit下将该文件执行“File->conversions->Dos to Unix”,执行这个转化后的sh文件能够直接在linux下执行。这步操作能够就是取消”\r”符号。

sed的替换
替换的基本语法
[address]s/pattern/replacement/flags
这里的flags有一下几种
n   为1-512之间的一个数字,表示当文本中匹配出现第n次时进行替换
g   表示对全部匹配进行替换,没有g的话通常只替换第一个匹配
p   打印匹配空间的内容
W file    将模式空间写入file中

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值