分类目录归档:Shell脚本

shell脚本实用初级入门二

最近朋友用shell写自动化测试脚本, 请求接口并处理一些逻辑。我写的也不多,只能边查边给他提供帮助。

以下就是这个过程形成的知识点【发现shell又强大,又弱小[笑哭]】

0、把数组转成字符串
本以为像其他语言,有现成的方法直接转换,比如PHP的implode(), Golang的strings.Join(strSlice, “,”)

结果发现Shell并没有,沮丧~
继续阅读

常用shell命令-进程查看

一、查看进程,ps aux

ps aux | grep 'niliu'
#以上命令想必你一定不陌生,那么如果想快速知道每行的含义呢
[root@Mcqp15t170 chuanbo7]# ps aux | grep 'USER'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      5637  0.0  0.0 112640   960 pts/0    S+   19:28   0:00 grep --color=auto USER

每一列参数说明
+---------+--------------------------------------------------------------------------------------------------------------------+
| name    | info                                                                                                               |
+---------+--------------------------------------------------------------------------------------------------------------------+
| USER    | 进程所有者用户名                                                                                                    |
| PID     | 进程标识符                                                                                                          |
| %CPU    | 该进程使用CPU百分比                                                                                                 |
| %MEM    | 该进程使用物理内存百分比                                                                                             |
| VSZ     | 该进程使用的虚拟内存(KB)                                                                                            |
| RSS     | 该进程占有的固定内存(KB)                                                                                            |
| TTY     | 终端名称                                                                                                           |
| STAT    | 进程状态(具体状态含义参考下文进程状态)                                                                                |
| START   | 进程开始执行时间(当天显示小时:分钟;一天之前显示月:日, 一年之前的还没有遇到过)                                           |
| TIME    | 进程实际占有CPU总时间(i:s)                                                                                          |
| COMMAND | 启动任务命令行包括参数                                                                                              |
+---------+--------------------------------------------------------------------------------------------------------------------+


# 其实ps aux就行了,但是如果进程太大,不方便查看

ps aux | grep 'filterfeeds'
root     16803  8.6  0.3 368496 43760 ?        S    17:37   4:27 /usr/local/sinasrv2/bin/php /data1/www/htdocs/energy.tv.weibo.cn/public/cli.php request_uri=/cli_filterfeeds/index/proc_total/8/proc_num/6
root     16870 18.6  0.4 383204 59104 ?        R    17:37   9:37 /usr/local/sinasrv2/bin/php /data1/www/htdocs/energy.tv.weibo.cn/public/cli.php request_uri=/cli_filterfeeds/index/proc_total/8/proc_num/7

进程状态:

D   不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
R   正在运行或可运行(在运行队列排队中)
S   可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
T   已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W   正在换页(2.6.内核之前有效)
X   死进程 (未开启)
Z   僵尸进程  进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
<   高优先级(not nice to other users)
N   低优先级(nice to other users)
L   页面锁定在内存(实时和定制的IO)
s   一个信息头
l   多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
+   在前台进程组 

继续阅读

shell脚本中关联数组及其遍历

shell中(version >= 4.1.2)也存在关联数组(associated array),跟PHP的关联数据很像。

查看shell版本

bash -version

GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

继续阅读

shell脚本验证业务机与DB的联通性

一个验证业务机与DB的联通性的小工具

#!/bin/bash
# 请求全部业务机上操作DB的接口,测试联通性
ips=(47.75.217.22, 47.75.217.23, 47.75.217.24, 47.75.217.25, 47.75.217.26)

if [ x$1 != x ]; then
    mod=$1
else
    mod="r"
fi

for ip in ${ips[@]};
do
    curl -x "$ip:80" "http://i.niliu.me/api/dbconn?cip=$ip&mod=$mod"
    echo "ok"
done

shell脚本实用初级入门

做为开发同学,实际工作中熟练使用大部分shell命令就能完成绝大多数事情,需要编写shell脚本的场景(机会)并不多。一般不会系统去学习shell脚本,这就导致偶尔要写一个shell脚本,往往觉得很费劲,比如自动登陆服务器、分发文件…

实际上系统介绍shell脚本的资料很少(包括书籍和网络),没有找到官网,网上各种教程也是众说纷纭,特整理一份让开发很快能熟悉的文档。

Shell是一种脚本编程语言,类似PHP、Python。可以简洁地表达复杂的操作(用很少的代码实现强大的功能)。
继续阅读

awk常用形式整理

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。这里并不打算介绍awk,也不是简明教程,如果想看教程,推荐耗子的文章《AWK 简明教程》

awk格式如下:

# 方式一:
awk '{pattern + action}' {filenames}
# 方式二:
cat filename | awk ‘{print $1}’

常用内置变量
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数

继续阅读

cron用法整理

看了很多资料把cron和crontab混为一谈,这里从澄清概念开始。

0、什么是cron。
在Linux环境下,周期性执行一些任务,用cron。cron由crond守护进程和一组crontab文件(配置文件)组成。

crond守护进程随系统启动,每分钟读取检查一次crontab文件,并通过fock子进程执行满足条件的指令。

# 查看cron手册
man cron
# 查看crond进程
ps -ef | grep 'crond' | grep -v 'grep'

继续阅读