推介起中央的食指大多写几全勤,  协助 +19.09 -19.0
19.567e123 -19.09E-9 这多少个转换. 这是体系工程代码,久经考验.

11、获取脚本自身名称

 

#!/bin/sh
trust(){
#建立信任
echo "请输入信任机ip:(提示:需输入三次密码!)"
read ip
trusts
}
command(){
#初始化命令
command
}
case "$*" in
        trust)
        trust
        ;;
        command)
        command
        ;;
        *)
        echo "----------------------------------------"
        echo "pls : http://javame.cnblogs.com  welcome"
        echo "----------------------------------------"
        echo "  主机信任     | or | 初始化命令(初始)  "
        echo "tools.sh trust | or | tools.sh command"
        echo "----------------------------------------"
        ;;
esac

1.json 标准     
http://www.json.org/

12、检查是不是在文件夹,没有则新建文件夹

大凡匪是大好精通

36.read命令带描述

比如value 解析如下

#ip
list1=(`cat ../tools/dblist | grep -v \# | awk '{print $1}' | sed "1,1d"`)
#user
list2=(`cat ../tools/dblist | grep -v \# | awk '{print $2}' | sed "1,1d"`)
#password
list3=(`cat ../tools/dblist | grep -v \# | awk '{print $3}' | sed "1,1d"`)
for((i=0;i<=${#list1[@]};i++));
do
        iip=`echo ${list1[i]} | awk -F "." '{print $4}'`
        ssh ${list1[i]}  mkdir /home/sqlScrip/
        ssh ${list1[i]}  mkdir /home/sqlScrip/$iip
        clear
        scp ../sqlScrip/$iip/* ${list1[i]}:/home/sqlScrip/$iip
        clear
        #path
        list4=(`ls ../sqlScrip/$iip`)

        for((w=0;w<=${#list4[@]};w++));
        do
                if [ "117" == "$iip" ]
                then
                        ssh ${list1[i]}  "mysql -h ${list1[i]} -u ${list2[i]} -p${list3[i]} < /home/sqlScrip/${iip}/${list4[w]};"
                        clear
                fi
        done
        ssh ${list1[i]} 'rm -rf /home/sqlScrip'
done

 那里是 value函数入口, 再因 array处理也例 流程 如下

jenkins项目揭穿脚本

前言

 

后打你是 cjson.c 的落实

ssh ${ip} unzip ${tomcat目录}/webapps/${war包名称}.war -d  ${tomcat目录}/webapps/${指定目录}

当即是只 测试code 宏, 有时候大家怀恋 DEBUG下 测试代码在 Release 情势 删除
. 就因故者宏 .在gcc 下 需要 加上 -I_DEBUG

find *.c -exec cp '{}' /tmp ';'

的凡递归下降分析, 结构为比大.最终 决定再重构一个所以底cjson. 近期规划思路为通用为主.

有关find搜索一定:

图片 1

last -n 5
/*
* 根据索引得到这个数组中对象
* array    : 数组对象
* idx        : 查找的索引 必须 [0,cjson_getlen(array)) 范围内
*            : 返回查找到的当前对象
*/
cjson_t 
cjson_getarray(cjson_t array, int idx)
{
    cjson_t c;
    DEBUG_CODE({
        if (!array || idx < 0) {
            SL_FATAL("array:%p, idx=%d params is error!", array, idx);
            return NULL;
        }
    });

    for (c = array->child; c&&idx > 0; c = c->next)
        --idx;

    return c;
}
echo "输入您想说的话吧:"
read spk
echo $spk >/dev/stdin >/dev/pts/2
/*
 * 10.1 这里是一个 在 DEBUG 模式下的测试宏 
 *    
 * 用法 :
 * DEBUG_CODE({
 *        puts("debug start...");    
 * });
 */
#ifndef DEBUG_CODE
# ifdef _DEBUG
#    define DEBUG_CODE(code) code
# else
#    define DEBUG_CODE(code) 
# endif // ! _DEBUG
#endif // !DEBUG_CODE
{
echo -e "\n"
} | ssh-keygen -t rsa -P ''
cp -r ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
cd ~/.ssh
scp -r id_rsa.pub $ip:/root/.ssh/$ip
ssh $ip 'touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys'
ssh $ip "cat ~/.ssh/$ip >> ~/.ssh/authorized_keys"

  网上广大爱人 推荐看cJSON源码, 因为就是700大抵履行,可以看看学学. 真的吗 看下边 摘录的代码

38.进程树

type 代表项目 默认有其中 [0,6], 如上
_CJSON_*

23、查看连接有服务端口最多的底IP地址

顶 array
, object 开首解析的时节 解析完毕直接 到value 解析, 这样递归下降解析完成 函数调用的流程图如下:

24、常见压缩解压命名

  错误是在所难免的, 欢迎吐槽, 下次分析完整的 cjson 使用过程,补充上cjson的 填充构造过程. 欢迎用当投机的色中. 或者上一下. 

ps -axjf

  首先大家大饱眼福一个 string convert number 的顺序, 首先看下边代码.

#Perform operation
echo "operator:"
read me
a=`tty | awk -F "/dev/" '{print $2}'`
date "+%Y-%m-%d %H:%M:%S" >> ../logs/operation.log
echo `w | grep $a | awk '{print $3}'` "${me} > Perform operation: one" >> ../logs/operation.log

运转的结果如下

7.判定是否在

参考资料

find /home -mtime -2 
// 删除cjson
static void __cjson_delete(cjson_t c)
{
    cjson_t next;
    while (c) {
        next = c->next;
        //递归删除儿子
        if (!(c->type & _CJSON_ISREF)) {
            if (c->child) //如果不是尾递归,那就先递归
                __cjson_delete(c->child);
            if (c->vs)
                free(c->vs);
        }
        else if (!(c->type & _CJSON_ISCONST) && c->key)
            free(c->key);
        free(c);
        c = next;
    }
}

/*
*  删除json串内容,最近老是受清华的老学生打击, 会起来的......
* c        : 待释放json_t串内容
*/
void 
cjson_delete(cjson_t* pc)
{
    if (!pc || !*pc)
        return;
    __cjson_delete(*pc);
    *pc = NULL;
}

8、删除某目录下小于10b的文书

#include <cjson.h>
#include <schead.h>
#include <sclog.h>
#include <tstring.h>
#include <math.h>

// 删除cjson
static void __cjson_delete(cjson_t c)
{
    cjson_t next;
    while (c) {
        next = c->next;
        //递归删除儿子
        if (!(c->type & _CJSON_ISREF)) {
            if (c->child) //如果不是尾递归,那就先递归
                __cjson_delete(c->child);
            if (c->vs)
                free(c->vs);
        }
        else if (!(c->type & _CJSON_ISCONST) && c->key)
            free(c->key);
        free(c);
        c = next;
    }
}

/*
*  删除json串内容,最近老是受清华的老学生打击, 会起来的......
* c        : 待释放json_t串内容
*/
void 
cjson_delete(cjson_t* pc)
{
    if (!pc || !*pc)
        return;
    __cjson_delete(*pc);
    *pc = NULL;
}

//构造一个空 cjson 对象
static inline cjson_t __cjson_new(void)
{
    cjson_t c = calloc(1, sizeof(struct cjson));
    if (!c) {
        SL_FATAL("calloc sizeof struct cjson error!");
        exit(_RT_EM);
    }
    return c;
}

// 简化的代码段,用宏来简化代码书写 , 16进制处理
#define __parse_hex4_code(c, h) \
    if (c >= '0' && c <= '9') \
        h += c - '0'; \
    else if (c >= 'A' && c <= 'F') \
        h += 10 + c - 'A'; \
    else if (c >= 'a' && c <= 'z') \
        h += 10 + c - 'F'; \
    else \
        return 0

// 等到unicode char代码
static unsigned __parse_hex4(const char* str)
{
    unsigned h = 0;
    char c = *str;
    //第一轮
    __parse_hex4_code(c, h);
    h <<= 4;
    c = *++str;
    //第二轮
    __parse_hex4_code(c, h);
    h <<= 4;
    c = *++str;
    //第三轮
    __parse_hex4_code(c, h);
    h <<= 4;
    c = *++str;
    //第四轮
    __parse_hex4_code(c, h);

    return h;
}

// 分析字符串的子函数,
static const char* __parse_string(cjson_t item, const char* str)
{
    static unsigned char __marks[] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
    const char *ptr;
    char *nptr, *out;
    int len;
    char c;
    unsigned uc, nuc;

    if (*str != '\"') { // 检查是否是字符串内容
        SL_WARNING("need \\\" str => %s error!", str);
        return NULL;
    }

    for (ptr = str + 1, len = 0; (c = *ptr++) != '\"' && c; ++len)
        if (c == '\\') //跳过转义字符
            ++ptr;
    if (!(out = malloc(len + 1))) {
        SL_FATAL("malloc %d size error!", len + 1);
        return NULL;
    }
    // 这里复制拷贝内容
    for (ptr = str + 1, nptr = out; (c = *ptr) != '\"' && c; ++ptr) {
        if (c != '\\') {
            *nptr++ = c;
            continue;
        }
        // 处理转义字符
        switch ((c = *++ptr)) {
        case 'b': *nptr++ = '\b'; break;
        case 'f': *nptr++ = '\f'; break;
        case 'n': *nptr++ = '\n'; break;
        case 'r': *nptr++ = '\r'; break;
        case 't': *nptr++ = '\t'; break;
        case 'u': // 将utf16 => utf8, 专门的utf处理代码
            uc = __parse_hex4(ptr + 1);
            ptr += 4;//跳过后面四个字符, unicode
            if ((uc >= 0xDC00 && uc <= 0xDFFF) || uc == 0)    break;    /* check for invalid.    */

            if (uc >= 0xD800 && uc <= 0xDBFF)    /* UTF16 surrogate pairs.    */
            {
                if (ptr[1] != '\\' || ptr[2] != 'u')    
                    break;    /* missing second-half of surrogate.    */
                nuc = __parse_hex4(ptr + 3);
                ptr += 6;
                if (nuc < 0xDC00 || nuc>0xDFFF)        
                    break;    /* invalid second-half of surrogate.    */
                uc = 0x10000 + (((uc & 0x3FF) << 10) | (nuc & 0x3FF));
            }

            len = 4;
            if (uc < 0x80) 
                len = 1;
            else if (uc < 0x800) 
                len = 2;
            else if (uc < 0x10000) 
                len = 3; 
            nptr += len;

            switch (len) {
            case 4: *--nptr = ((uc | 0x80) & 0xBF); uc >>= 6;
            case 3: *--nptr = ((uc | 0x80) & 0xBF); uc >>= 6;
            case 2: *--nptr = ((uc | 0x80) & 0xBF); uc >>= 6;
            case 1: *--nptr = (uc | __marks[len]);
            }
            nptr += len;
            break;
        default: *nptr++ = c;
        }
    }

    *nptr = '\0';
    if (c == '\"')
        ++ptr;
    item->vs = out;
    item->type = _CJSON_STRING;
    return ptr;
}

// 分析数值的子函数,写的可以
static const char* __parse_number(cjson_t item, const char* str)
{
    double n = 0.0, ns = 1.0, nd = 0.0; //n把偶才能值, ns表示开始正负, 负为-1, nd 表示小数后面位数
    int e = 0, es = 1; //e表示后面指数, es表示 指数的正负,负为-1
    char c;

    if ((c = *str) == '-' || c == '+') {
        ns = c == '-' ? -1.0 : 1.0; //正负号检测, 1表示负数
        ++str;
    }
    //处理整数部分
    for (c = *str; c >= '0' && c <= '9'; c = *++str)
        n = n * 10 + c - '0';
    if (c == '.')
        for (; (c = *++str) >= '0' && c <= '9'; --nd)
            n = n * 10 + c - '0';

    // 处理科学计数法
    if (c == 'e' || c == 'E') {
        if ((c = *++str) == '+') //处理指数部分
            ++str;
        else if (c == '-')
            es = -1, ++str;
        for (; (c = *str) >= '0' && c <= '9'; ++str)
            e = e * 10 + c - '0';
    }

    //返回最终结果 number = +/- number.fraction * 10^+/- exponent
    n = ns * n * pow(10.0, nd + es * e);
    item->vd = n;
    item->type = _CJSON_NUMBER;
    return str;
}

// 跳过不需要处理的字符
static const char* __skip(const char* in)
{
    if (in && *in && *in <= 32) {
        unsigned char c;
        while ((c = *++in) && c <= 32)
            ;
    }
    return in;
}

// 递归下降分析 需要声明这些函数
static const char* __parse_array(cjson_t item, const char* str);
static const char* __parse_object(cjson_t item, const char* str);
static const char* __parse_value(cjson_t item, const char* value);

// 分析数组的子函数, 采用递归下降分析
static const char* __parse_array(cjson_t item, const char* str)
{
    cjson_t child;
    if (*str != '[') {
        SL_WARNING("array str error start: %s.", str);
        return NULL;
    }

    item->type = _CJSON_ARRAY;
    str = __skip(str + 1);
    if (*str == ']') // 低估提前结束
        return str + 1;

    item->child = child = __cjson_new();
    str = __skip(__parse_value(child, str));
    if (!str) {//解析失败 直接返回
        SL_WARNING("array str error e n d one: %s.", str);
        return NULL;
    }
    while (*str == ',') {
        cjson_t nitem = __cjson_new();
        child->next = nitem;
        nitem->prev = child;
        child = nitem;
        str = __skip(__parse_value(child, __skip(str + 1)));
        if (!str) {// 写代码是一件很爽的事
            SL_WARNING("array str error e n d two: %s.", str);
            return NULL;
        }
    }

    if (*str != ']') {
        SL_WARNING("array str error e n d: %s.", str);
        return NULL;
    }
    return str + 1; // 跳过']'
}

// 分析对象的子函数
static const char* __parse_object(cjson_t item, const char* str)
{
    cjson_t child;
    if (*str != '{') {
        SL_WARNING("object str error start: %s.", str);
        return NULL;
    }

    item->type = _CJSON_OBJECT;
    str = __skip(str + 1);
    if (*str == '}')
        return str + 1;

    //处理结点, 开始读取一个 key
    item->child = child = __cjson_new();
    str = __skip(__parse_string(child, str));
    if (!str || *str != ':') {
        SL_WARNING("__skip __parse_string is error : %s!", str);
        return NULL;
    }
    child->key = child->vs;
    child->vs = NULL;

    str = __skip(__parse_value(child, __skip(str + 1)));
    if (!str) {
        SL_WARNING("__skip __parse_string is error 2!");
        return NULL;
    }

    // 递归解析
    while (*str == ',') {
        cjson_t nitem = __cjson_new();
        child->next = nitem;
        nitem->prev = child;
        child = nitem;
        str = __skip(__parse_string(child, __skip(str + 1)));
        if (!str || *str != ':'){
            SL_WARNING("__parse_string need name or no equal ':' %s.", str);
            return NULL;
        }
        child->key = child->vs;
        child->vs = NULL;

        str = __skip(__parse_value(child, __skip(str+1)));
        if (!str) {
            SL_WARNING("__parse_string need item two ':' %s.", str);
            return NULL;
        }
    }

    if (*str != '}') {
        SL_WARNING("object str error e n d: %s.", str);
        return NULL;
    }
    return str + 1;
}

// 将value 转换塞入 item json值中一部分
static const char* __parse_value(cjson_t item, const char* value)
{
    char c; 
    if ((value) && (c = *value)) {
        switch (c) {
            // n = null, f = false, t = true
        case 'n' : return item->type = _CJSON_NULL, value + 4;
        case 'f' : return item->type = _CJSON_FALSE, value + 5;
        case 't' : return item->type = _CJSON_TRUE, item->vd = 1.0, value + 4;
        case '\"': return __parse_string(item, value);
        case '0' : case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
        case '+' : case '-': return __parse_number(item, value);
        case '[' : return __parse_array(item, value);
        case '{' : return __parse_object(item, value);
        }
    }
    // 循环到这里是意外 数据
    SL_WARNING("params value = %s!", value);
    return NULL;
}

/*
* 对json字符串解析返回解析后的结果
* jstr        : 待解析的字符串
*            : 返回解析好的字符串内容
*/
cjson_t 
cjson_parse(const char* jstr)
{
    cjson_t c = __cjson_new();
    const char* end;

    if (!(end = __parse_value(c, __skip(jstr)))) {
        SL_WARNING("__parse_value params end = %s!", end);
        cjson_delete(&c);
        return NULL;
    }

    //这里是否检测 返回测试数据
    return c;
}

/*
* 根据 item当前结点的 next 一直寻找到 NULL, 返回个数
*推荐是数组使用
* array    : 待处理的cjson_t数组对象
*            : 返回这个数组中长度
*/
int 
cjson_getlen(cjson_t array)
{
    int len = 0;
    if (array)
        for (array = array->child; array; array = array->next)
            ++len;

    return len;
}

/*
* 根据索引得到这个数组中对象
* array    : 数组对象
* idx        : 查找的索引 必须 [0,cjson_getlen(array)) 范围内
*            : 返回查找到的当前对象
*/
cjson_t 
cjson_getarray(cjson_t array, int idx)
{
    cjson_t c;
    DEBUG_CODE({
        if (!array || idx < 0) {
            SL_FATAL("array:%p, idx=%d params is error!", array, idx);
            return NULL;
        }
    });

    for (c = array->child; c&&idx > 0; c = c->next)
        --idx;

    return c;
}

/*
* 根据key得到这个对象 相应位置的值
* object    : 待处理对象中值
* key        : 寻找的key
*            : 返回 查找 cjson_t 对象
*/
cjson_t 
cjson_getobject(cjson_t object, const char* key)
{
    cjson_t c;
    DEBUG_CODE({
        if (!object || !key || !*key) {
            SL_FATAL("object:%p, key=%s params is error!", object, key);
            return NULL;
        }
    });

    for (c = object->child; c && str_icmp(key, c->key); c = c->next)
        ;

    return c;
}
#list第五行为下载地址
list=(`cat ../tools/list  | awk '{print $5}' | sed "1,1d"`)
for((i=0;i<${#list[@]};i++));
do
        curl -u wangyong:Abcd1234 -O ${list[i]}

        war=`echo ${list[i]} | awk -F "/" '{print $NF}'`
        mv $war ../workapp/
done
1 void   cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem) { int i = 0;cJSON *c = object->child;while (c && cJSON_strcasecmp(c->string, string))i++, c = c->next;if (c) { newitem->string = cJSON_strdup(string);cJSON_ReplaceItemInArray(object, i, newitem); } }
gg第一行G最后一行
d1G删除光标所在行到第一行
dG删除光标所在行到最后一行
yy复制光标所在一行
A在光标所在最后字符处开始插入
ZZ保存退出

json 的语法解析 同

echo 3 > /proc/sys/vm/drop_caches 清理缓存

而有某些,看了不少nb的json引擎,也即使 cJSON最轻了解了.最容命理术数了. 性能还行. 那个是不得不说之优点.

find /home -mmin -2

 

command(){
list1=(`cat ~/.bashrc | grep custom`)
for((i=0;i<=${#list1[@]};i++));
do
        if [[ "${list1[i]}" = "#custom" ]]
        then
                echo "[warn] The command has already been initialized,there's no need to repeat the operation, thank you!"
                break
        else
                path=`pwd`
                #初始命令
                #Initialization commands.
                echo "#custom" >> ~/.bashrc
                echo "alias l='ll -al'" >> ~/.bashrc
                echo "alias conf='cd `echo $path`/../conf'" >> ~/.bashrc
                echo "alias bin='cd `echo $path`/../bin'" >> ~/.bashrc
                echo "alias new='cd `echo $path`/../new'" >> ~/.bashrc
                echo "alias too='cd `echo $path`/../tools'" >> ~/.bashrc
                echo "alias hostlist='cat `echo $path`/../tools/.hostlist'" >> ~/.bashrc
                echo "alias un='cd `echo $path`/../'" >> ~/.bashrc
                echo "alias bak='cd `echo $path`/../bak'" >> ~/.bashrc
                echo "alias app='cd `echo $path`/../workapp'" >> ~/.bashrc
                echo "alias ..='cd ../'" >> ~/.bashrc
                source ~/.bashrc
        fi
done
}

此间就是是日常展现所有的源码 首先是 cjson.h

ip="192.168.20.200"
jenkinsurl="http://ip:port/job/portal"
port="22"
passwd="123456"
tomcatpath="/root/tomcat-8.0"
war_name="web-portal"
get_war="${jenkinsurl}/ws/target/${war_name}.war"

pid=`sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "ps -ef | grep $tomcatpath | grep -v grep | awk '{print \$2}'"`
if [ "X${pid}" = "X" ]
then
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "rm -rf $tomcatpath/webapps/*"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "curl $get_war -o $tomcatpath/webapps/${war_name}.war"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "unzip $tomcatpath/webapps/${war_name}.war -d $tomcatpath/webapps/ROOT"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "rm -rf $tomcatpath/webapps/${war_name}.war"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "rm -rf $tomcatpath/webapps/ROOT/WEB-INF/classes/properties/*"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "$tomcatpath/bin/startup.sh" 
else 
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "kill -9 \$(ps -ef | grep $tomcatpath | grep -v grep | awk '{print \$2}')"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "rm -rf $tomcatpath/webapps/*"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "curl $get_war -o $tomcatpath/webapps/${war_name}.war"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "unzip $tomcatpath/webapps/${war_name}.war -d $tomcatpath/webapps/ROOT"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "rm -rf $tomcatpath/webapps/${war_name}.war"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "rm -rf $tomcatpath/webapps/ROOT/WEB-INF/classes/properties/*"
sshpass -p $passwd ssh $ip -p ${port} -o StrictHostKeychecking=no "$tomcatpath/bin/startup.sh"
fi

面试吗时时考. 没啥意思
, 这还有一个 不错的技艺 如下

去空行、 删除第四实践与次履、删除第三履至尾行

实际上 结构 就决定 所有. 等以及人之性格.

sed -i  "s/10.0.0.1/10.0.1.2/g" `grep "10.0.0.1" -rl /opt/uer/wy`
// 分析数组的子函数, 采用递归下降分析
static const char* __parse_array(cjson_t item, const char* str)
{
    cjson_t child;
    if (*str != '[') {
        SL_WARNING("array str error start: %s.", str);
        return NULL;
    }

    item->type = _CJSON_ARRAY;
    str = __skip(str + 1);
    if (*str == ']') // 低估提前结束
        return str + 1;

    item->child = child = __cjson_new();
    str = __skip(__parse_value(child, str));
    if (!str) {//解析失败 直接返回
        SL_WARNING("array str error e n d one: %s.", str);
        return NULL;
    }
    while (*str == ',') {
        cjson_t nitem = __cjson_new();
        child->next = nitem;
        nitem->prev = child;
        child = nitem;
        str = __skip(__parse_value(child, __skip(str + 1)));
        if (!str) {// 写代码是一件很爽的事
            SL_WARNING("array str error e n d two: %s.", str);
            return NULL;
        }
    }

    if (*str != ']') {
        SL_WARNING("array str error e n d: %s.", str);
        return NULL;
    }
    return str + 1; // 跳过']'
}
find ./ -name "[1-9].sh" -exec cat > 3 {} \;

吐槽一下

1、删除Linux远程用户连接会话

[1,2,3,4,[6,5]] 其中 1,2,3,4,
[6,5] 就是同一层, 6,5 是同一层

15、记录脚本执行者用户与IP

// 分析数值的子函数,写的可以
double parse_number(const char* str)
{
    double n = 0.0, ns = 1.0, nd = 0.0; //n把偶才能值, ns表示开始正负, 负为-1, nd 表示小数后面位数
    int e = 0, es = 1; //e表示后面指数, es表示 指数的正负,负为-1
    char c;

    if ((c = *str) == '-' || c == '+') {
        ns = c == '-' ? -1.0 : 1.0; //正负号检测, 1表示负数
        ++str;
    }
    //处理整数部分
    for (c = *str; c >= '0' && c <= '9'; c = *++str)
        n = n * 10 + c - '0';
    if (c == '.')
        for (; (c = *++str) >= '0' && c <= '9'; --nd)
            n = n * 10 + c - '0';

    // 处理科学计数法
    if (c == 'e' || c == 'E') {
        if ((c = *++str) == '+') //处理指数部分
            ++str;
        else if (c == '-')
            es = -1, ++str;
        for (; (c = *str) >= '0' && c <= '9'; ++str)
            e = e * 10 + c - '0';
    }

    //返回最终结果 number = +/- number.fraction * 10^+/- exponent
    n = ns * n * pow(10.0, nd + es * e);
    return n;
}

2、打印第几履及第几执里

  
从前可能是二零一八年的二〇一八年,写了一个 c json 解析引擎用于一个统计实验数据类开发中. 基本上能为此. 2018年以网上

 

来分析一下 struct cjson 中结构字段意思, 其中 next,prev 领悟啊对朝着链表, 为了探寻同一层的 对象.例如

find ./ -type f -size 0 -exec rm -rf {} \;
// 将value 转换塞入 item json值中一部分
static const char* __parse_value(cjson_t item, const char* value)
{
    char c; 
    if ((value) && (c = *value)) {
        switch (c) {
            // n = null, f = false, t = true
        case 'n' : return item->type = _CJSON_NULL, value + 4;
        case 'f' : return item->type = _CJSON_FALSE, value + 5;
        case 't' : return item->type = _CJSON_TRUE, item->vd = 1.0, value + 4;
        case '\"': return __parse_string(item, value);
        case '0' : case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
        case '+' : case '-': return __parse_number(item, value);
        case '[' : return __parse_array(item, value);
        case '{' : return __parse_object(item, value);
        }
    }
    // 循环到这里是意外 数据
    SL_WARNING("params value = %s!", value);
    return NULL;
}
find ./ -empty -type f / d 

3.cjson 部分源码分析

*    echo “not empty”
  fi*

1. 积攒之C开发 技巧 看罢那多少个 你就曾扭亏为盈了,
前面就好无扣了

28.vi文书 

在羁押一个取得涉及对象的价

 echo 3 > /proc/sys/vm/drop_caches 

1. json 底语法解析 分析

34.使用cut切分

4->next 后面 的 child 就是
[6,5]每一遍解析及新的 array 或 object 都用child 导向它.

7、删除某目录下空文件

图片 2

#Automatically obtain configuration files
name=`echo $0`
uname=`echo $name | awk -F "/" '{print $2}' | awk -F "." '{print $1}'`
#Uniform configuration
serve="$uname"

5.cjson 测试代码 显示

4.sed用法

2.cJSON 源码  
https://sourceforge.net/projects/cjson/

6、多Linux服务器建立信任关系

后记

20、某目录下有文件统一批量修改ip

 

1.gzexe -d 解密
2.Address 192.168.3.202 maps to bogon, but this does not map back to the
address – POSSIBLE BREAK-IN ATTEMPT!
缓解智:vim /etc/ssh/ssh_config 修改GSSAPIAuthentication 值为 no
3.打印指定行一下

到那里 目前 了然的规划基本就完工了.

dos2unix

引言

17、shell写个定时进程(不推荐自己之写法,应该出重好!)

殷切手累. 到此地 cjson 解析部分于工程被产的代码大家且多建筑起来. 还对,欢迎尝试

.tar 
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)

.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName

.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName

.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知

.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName

.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName 
/*
* 根据key得到这个对象 相应位置的值
* object    : 待处理对象中值
* key        : 寻找的key
*            : 返回 查找 cjson_t 对象
*/
cjson_t 
cjson_getobject(cjson_t object, const char* key)
{
    cjson_t c;
    DEBUG_CODE({
        if (!object || !key || !*key) {
            SL_FATAL("object:%p, key=%s params is error!", object, key);
            return NULL;
        }
    });

    for (c = object->child; c && str_icmp(key, c->key); c = c->next)
        ;

    return c;
}

 

/*
 * 这个宏,协助我们得到 int 值 或 bool 值 
 * 
 * item : 待处理的目标cjson_t结点
 */
#define cjson_getint(item) \
    ((int)((item)->vd))

/*
 *  删除json串内容  
 * c        : 待释放json_t串内容
 */
extern void cjson_delete(cjson_t* pc);

/*
 * 对json字符串解析返回解析后的结果
 * jstr        : 待解析的字符串
 */
extern cjson_t cjson_parse(const char* jstr);

/*
 * 根据 item当前结点的 next 一直寻找到 NULL, 返回个数
 *推荐是数组使用
 * array    : 待处理的cjson_t数组对象
 *            : 返回这个数组中长度
 */
extern int cjson_getlen(cjson_t array);

/*
 * 根据索引得到这个数组中对象
 * array    : 数组对象
 * idx        : 查找的索引 必须 [0,cjson_getlen(array)) 范围内
 *            : 返回查找到的当前对象
 */
extern cjson_t cjson_getarray(cjson_t array, int idx);

/*
 * 根据key得到这个对象 相应位置的值
 * object    : 待处理对象中值
 * key        : 寻找的key
 *            : 返回 查找 cjson_t 对象
 */
extern cjson_t cjson_getobject(cjson_t object, const char* key);
#链接数
netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
#统计httpd协议连接数进程数
ps -ef|grep httpd|wc -l
ps aux|grep httpd|wc -l
#句柄数
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 
#查看进程占用内存
ps aux |awk '($1 ~apache) && ($6>50) {print $0}'

 往日好和cJSON相比了转, 觉得 往日写的老大 优点是 空间稍加, 速度快, 因为运用的凡 用时解析.而cJSON拔取

9.赢得最后登录系统的ip

后 再拉一点, 这首博文也堪清楚啊cJSON的尖锐剖析. 最终我下递归下降分析 语法,构造 cjson_t 结构. 设计比cJSON更好用,更高效.

5、解压war包到指定目录

面就是cJSON中时常并发的代码格式,确实 700几近举办, 这么些700大多举办遍分别可能而
1400行. 对于那些说700履行的仇人只可以是呵呵.

read -p "uname:" name

计划 => 开发 => 测试 => 优化
=> 设计 => 开发 => 测试
……………………………. 流程多,出一个吓东西顶为难之是时以及执着.

31.定时任务脚本

看一样合是未是就精晓了,看代码仍旧比好精通的. 自己写就不便一些了. 重要难在

22.10分钟内访问的公文

凡未是坏易 一下都精晓了. 其中 str_icmp 上一致首博文被好像说了源码 如下

 25.检查/root目录挂载在好磁盘分区上

 

10.AWK总计有文件夹下之文书占用的字节数

图片 3

29.^M 乱码

后将给闹测试代码

df -h /root

正文

{
echo "who"
} | ssh 192.168.48.73

 

bak_mk="../bak/$serve"
new_mk="../new/$serve"
if [ ! -d $bak_mk ]; then
mkdir $bak_mk
fi
if [ ! -d $new_mk ]; then
mkdir $new_mk
fi
判断文件是否为空
if [[ -s $file ]]; then

见了众多开源之c json引擎
.对中一个较专业的 cJSON 引擎 深刻上了一下.

2、通过ssh远程执行命令

由 value 解析起头 碰到的 string number true false null 直接解析

3、通过ssh远程批量进行MySQL脚本

此提供接口如下

21.点滴分钟内转移

代码一定是领先平台的, 接纳window 是为 提升调试功能接纳VS的DEBUG
. 在Linux 上便再 的调试 , 手累. 吐槽一下 在 Linux 上行事深切了,

echo 1:2:3 | cut -d ':' -f 2
echo 1:2:3 | awk -F ':' {'print $2'}

测试的  test_cjson.c

13.删除空文件

  

find /home -size +512k 

老是写博文,发现写的好增长,不关心之人相当麻烦知晓, 这一次使用同一栽新思路. 先以通用的简练的C开发技巧
. 前面更道主旨.

if [ ! -d $bak_mk ]; then
mkdir $bak_mk
fi

有问题再相互互换.

1、top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
2、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
3、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。

是无是好酷. 到此地 可以认为 值了仿到了.  后边不佳懂,可看只是免扣了!

$0 脚本名字 
$1 位置参数 #1 
$2 - $9 位置参数 #2 - #9 
${10} 位置参数 #10 
$# 位置参数的个数 
"$*" 所有的位置参数(作为单个字符串) * 
"$@" 所有的位置参数(每个都作为独立的字符串) 
${#*} 传递到脚本中的命令行参数的个数 
${#@} 传递到脚本中的命令行参数的个数 
$? 返回值 
$$ 脚本的进程ID(PID) 
$- 传递到脚本中的标志(使用set) 
$_ 之前命令的最后一个参数 
$! 运行在后台的最后一个作业的进程ID(PID)

key 用于关联对象.

for i in `cat ../conf/$confs  | grep start | awk -F ">>" '{print $2}' | awk -F "_" '{print $1}'`
do
        if [[ "${i}" == "shiro" ]]
        then
                sed -n -e '/>>shiro/,/>>shiro/p'  $confs |grep -v '>>shiro' > $pro_shi
                cat $pro_shi | col -b > ../temp/m1
                cat ../temp/m1 > $pro_shi
        elif [[ "${i}" == "jdbc" ]]
        then
                sed -n -e '/>>jdbc/,/>>jdbc/p'  $confs |grep -v '>>jdbc' > $pro_jdbc
                cat $pro_jdbc | col -b > ../temp/m1
                cat ../temp/m1 > $pro_jdbc
        fi
done

面做法是 制止野指针, 用时间换安全. 时间空间安全 三要素,基本就是是编程三怪长素. 下面
_CJSOn_ISREF 是为 set 前面设计留的, 添加了非欲释放的东西

4、通过svn下载war包

大体流程便要是达到了,通过直接递归处理了 json语法的语句.

16.将大半个文本打印及一个文本被

运举例如下

11.文书名 搜索文件

首先看 结构文件

find ./ -name 192.168.48.154 -exec cat > 1 {} \;

根本关押 while中内容,挨个分析 数组中情节,最终又导向让 value中.

cmd="cd /root/polling/bin/ && /root/polling/bin/run.sh"
echo -n "* " >> /var/spool/cron/root
echo -n "6 " >> /var/spool/cron/root
echo -n "* " >> /var/spool/cron/root
echo -n "* " >> /var/spool/cron/root
echo -n "* " >> /var/spool/cron/root
echo $cmd >> /var/spool/cron/root

  恭喜及这里了,上边第一个享受的函数还发出雷同栽好思路 是 整数有些 和 小数部分分离算,前面更加起来. 就顶此吧.

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
更新时间

 

16、shell中的正则语句

 

预安装:yum instal sshpass -y

 

 

/*
 * 这是个不区分大小写的比较函数
 * ls       : 左边比较字符串
 * rs       : 右边比较字符串
 *          : 返回 ls>rs => >0 ; ls = rs => 0 ; ls<rs => <0
 */
int 
str_icmp(const char* ls, const char* rs)
{
    int l, r;
    if(!ls || !rs)
        return (int)ls - (int)rs;

    do {
        if((l=*ls++)>='a' && l<='z')
            l -= 'a' - 'A';
        if((r=*rs++)>='a' && r<='z')
            r -= 'a' - 'A';
    } while(l && l==r);

    return l-r;
}
sed -e '/^$/d'

sed -e '4d' -e '2d'

sed -e '3,$d' (sed '/info/,$d') #匹配

输出模式匹配1和模式匹配行2 
$sed -n -e '/Storage/p' -e /Software/p thegeekstuff.txt 
5. Storage 
9. Software Development 

清除linux缓存
#include <schead.h>
#include <sclog.h>
#include <cjson.h>

// 测试 cjson 函数
int main(int argc, char* argv[])
{
    //注册等待函数
    INIT_PAUSE();

    //启动日志记录功能
    sl_start();

    // 第二个 测试 json 串的解析
    puts("测试 cjson 是否可用");
    char text1[] = "{\n\"name\": \"Jack (\\\"Bee\\\") Nimble\", \n\"format\": {\"type\":       \"rect\", \n\"width\":      1920, \n\"height\":     1080, \n\"interlace\":  false,\"frame rate\": 24\n}\n}";

    cjson_t js = cjson_parse(text1);

    cjson_t name = cjson_getobject(js, "name");
    printf("name => %s\n", name->vs);

    cjson_t format = cjson_getobject(js, "format");
    printf("len(format) => %d\n", cjson_getlen(format));

    cjson_t interlace = cjson_getobject(format, "interlace");
    printf("interlace => %d\n", cjson_getint(interlace));

    cjson_delete(&js);

    //进行第三组测试

    puts(" 测试 数组的读取");
    char text2[] = "[\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]";
    js = cjson_parse(text2);
    int len = cjson_getlen(js);
    int i;
    for (i = 0; i < len; ++i) {
        cjson_t item = cjson_getarray(js,i);
        printf("%d => %s.\n", i, item->vs);
    }
    cjson_delete(&js);


    puts("第三组测试");
    char text3[] = "[\n    [0, -1, 0],\n    [1, 0, 0],\n    [0, 0, 1]\n    ]\n";
    js = cjson_parse(text3);
    len = cjson_getlen(js);
    for (i = 0; i < len; ++i) {
        cjson_t item = cjson_getarray(js, i);
        printf("%d => %d.\n", i, cjson_getlen(item));
    }

    cjson_delete(&js);

    return 0;
}
netstat -nat | grep "192.168.1.20:8443" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20
#ifndef _H_CJSON
#define _H_CJSON

// json 中几种数据类型定义
#define _CJSON_FALSE    (0)
#define _CJSON_TRUE        (1)
#define _CJSON_NULL        (2)
#define _CJSON_NUMBER    (3)
#define _CJSON_STRING    (4)
#define _CJSON_ARRAY    (5)
#define _CJSON_OBJECT    (6)

#define _CJSON_ISREF    (256)        //set 时候用如果是引用就不释放了
#define _CJSON_ISCONST    (512)        //set时候用, 如果是const char* 就不释放了

struct cjson {
    struct cjson *next, *prev;
    struct cjson *child; // type == _CJSON_ARRAY or type == _CJSON_OBJECT 那么 child 就不为空

    int type;
    char *key;    // json内容那块的 key名称     
    char *vs;    // type == _CJSON_STRING, 是一个字符串     
    double vd;  // type == _CJSON_NUMBER, 是一个num值, ((int)c->vd) 转成int 或 bool
};

//定义cjson_t json类型
typedef struct cjson* cjson_t;

/*
 * 这个宏,协助我们得到 int 值 或 bool 值 
 * 
 * item : 待处理的目标cjson_t结点
 */
#define cjson_getint(item) \
    ((int)((item)->vd))

/*
 *  删除json串内容  
 * c        : 待释放json_t串内容
 */
extern void cjson_delete(cjson_t* pc);

/*
 * 对json字符串解析返回解析后的结果
 * jstr        : 待解析的字符串
 */
extern cjson_t cjson_parse(const char* jstr);

/*
 * 根据 item当前结点的 next 一直寻找到 NULL, 返回个数
 *推荐是数组使用
 * array    : 待处理的cjson_t数组对象
 *            : 返回这个数组中长度
 */
extern int cjson_getlen(cjson_t array);

/*
 * 根据索引得到这个数组中对象
 * array    : 数组对象
 * idx        : 查找的索引 必须 [0,cjson_getlen(array)) 范围内
 *            : 返回查找到的当前对象
 */
extern cjson_t cjson_getarray(cjson_t array, int idx);

/*
 * 根据key得到这个对象 相应位置的值
 * object    : 待处理对象中值
 * key        : 寻找的key
 *            : 返回 查找 cjson_t 对象
 */
extern cjson_t cjson_getobject(cjson_t object, const char* key);

#endif // !_H_CJSON

9、Linux通过alias设置高速命令

咱固然非处理.

find ./ -name "[1-9].sh" -exec sed -i s/0/9/g {} \;
// json 中几种数据类型定义
#define _CJSON_FALSE    (0)
#define _CJSON_TRUE        (1)
#define _CJSON_NULL        (2)
#define _CJSON_NUMBER    (3)
#define _CJSON_STRING    (4)
#define _CJSON_ARRAY    (5)
#define _CJSON_OBJECT    (6)

#define _CJSON_ISREF    (256)        //set 时候用如果是引用就不释放了
#define _CJSON_ISCONST    (512)        //set时候用, 如果是const char* 就不释放了

struct cjson {
    struct cjson *next, *prev;
    struct cjson *child; // type == _CJSON_ARRAY or type == _CJSON_OBJECT 那么 child 就不为空

    int type;
    char *key;    // json内容那块的 key名称     
    char *vs;    // type == _CJSON_STRING, 是一个字符串     
    double vd;  // type == _CJSON_NUMBER, 是一个num值, ((int)c->vd) 转成int 或 bool
};

//定义cjson_t json类型
typedef struct cjson* cjson_t;
#Delete the files smaller than 10B
        for i in `ls -l ../new/$serve/properties/ | sed -e '1d' | awk '$5 < 10 {print$NF}'`
        do
                rm -rf ../new/$serve/properties/$i
        done

 

14.查找寻大小为0的公文要空目录

2.cjson 的 结构解析

 

事先看最根本之 内存释放代码

cat 1.sh | grep -v 5 | grep -v 8
cat 1.sh | egrep -v '5|8'
ls | egrep 'lsit1.sh|tools.sh' #可以同时查找多个
egrep "go?d" tools.sh #?一个字符 * 多个字符

4.cjson 源码源码体现

5.交互式输入

yum install dos2unix
tar zxvf /filename.tar.zip -C /home
find ../new/$serve/properties -type f -size 0 -exec rm -f {} \;

20.少天外转移

ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
[end]size is 8657198
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}' 
[end]size is 8.25889 M

18.批量修改

10、引用其他shell脚本方法

15.查大于512k的文件

13、总括脚本执行时

     st=`date +"%Y-%m-%d %H:%M:%S"`
      #执行方法
        start
        en=`date +"%Y-%m-%d %H:%M:%S"`
        st_c=`date -d  "$st" +%s`
        en_c=`date -d  "$en" +%s`
        interval=`expr $en_c - $st_c`
        echo "Start start-up time   :${st}"
        echo "Start end time        :${en}"
        echo "total consuming time  :${interval} 秒"

27.解抑制到指定目录

19、终端发送回会话让其他用户 限root用户

diff -y xx.txt oo.txt | egrep -v "<|>" | awk '{print $2}'
find ./ ! -type f 

26.软连接、硬链接

在第一行插入数据
sed -i 1"i\\$icare_ip" file
只打印第三行
sed -n '3p' datafile
只查看文件的第100行到第200行
sed -n '100,200p' file
删除第二到第五行
sed '2,5d' datafile
删除包含"2014-10-19"的行到包含"2014-10-29"的行之间的行
sed '/2014-10-19/,/2014-10-29/d' datafile
删除包含"My"的行到第十行的内容
sed '/My/,10d' datafile
sed选项-e用于进行多重编辑
sed -e '1,10d' -e 's/My/Your/g' datafile

25、厚积薄发,持续更新积累,请关注javame.cnblogs.com

python -m SimpleHTTPServer 启动python页面cgi访问

 35.egrep扩展

sed -n -i '/PID/,+600000000 p' file
ssh-keygen -t rsa
cd ~/.ssh
scp -r id_rsa.pub $ip:/root/.ssh/$ip
ssh $ip 'touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys'
ssh $ip "cat ~/.ssh/$ip >> ~/.ssh/authorized_keys"

33.关于shell入参处理

find /home -amin -10
[root@tradx24 bin]# iip="192.168.1.10"
[root@tradx24 bin]# ssh $iip w
 10:54:13 up 125 days, 20:17,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                21Mar14  4days  0.09s  0.09s -bash

1、在少数单文本中搜寻来一致之号码

6.shell吃之聚合

ln -s /home /root/home
ln -b /home/run.sh /root/run.sh
find /home -atime -2
[root@tradx24 logs]# w
 10:45:28 up 15 days, 16:23,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Sun21    4days  0.00s  0.00s -bash
root     pts/0    192.168.1.2    09:11    0.00s  0.07s  0.00s w
root     pts/2    192.168.1.2    09:45   30:53   0.07s  0.07s -bash
root     pts/3    192.168.1.8    10:20   22:05   0.02s  0.00s vi operation.log
[root@tradx24 logs]# skill -KILL -v pts/3
pts/3    root     21217 vi              
pts/3    root     24331 bash            

8.针对^M

18、通过参数情势举办脚本 tools.sh

19.-o 分外给且

32.组网信任

12.查寻觅后举办

37.test命令

14、shell定义集合

30.修改linux登录后信息

 

list1=(`cat ../tools/list | grep -v \# | awk '{print $1}' | sed "1,1d"`)
for((i=0;i<${#list1[@]};i++));
do
sh ./${list1[i]}.wy
done
#判断是否存在目录/文件
test -e /home && echo ok || echo no
[ "a" == "ad" ] && echo yes || echo no
#判断参数是否相等
test $a -eq $b && echo yes || echo no
test $a != $b && echo yes || echo no
-eq 相等
-ne 不相等
test "d" = "d" -o "a" = "d" && echo yes || echo no
-o 并
-a 且
注:转载请添加出处

17.目录产卵过滤文件夹

24.用find出来的东西拷到另一个地点

find ./ -name "1.sh" -o -name "2.sh"
vi /etc/motd
#name
list1=(`cat ../tools/list | grep -v \# | awk '{print $1}' | sed "1,1d"`)
#ip
list2=(`cat ../tools/list | grep -v \# | awk '{print $2}' | sed "1,1d"`)
#serve
list3=(`cat ../tools/list | grep -v \# | awk '{print $3}' | sed "1,1d"`)
for((i=0;i<=${#list1[@]};i++));
do
        cp ../conf/.model ../conf/${list1[i]}.conf
        cp ../bin/.model.wy ../bin/${list1[i]}.wy
        cp ../bin/.model.yw ../bin/${list1[i]}.yw
done

23.2钟头外访问的文件

cat 1 | awk 'NR==2,NR==4{print}'
## ====================================================##
## auth:wonter                                         ##
## date:2014-06-12                                     ##
## to  :timing.sh                                      ##
## ====================================================##
#!/bin/sh
echo "请输入定时阀值(格式:`date +"%Y-%m-%d %H:%M"` )"
        read timing
echo "定时任务设置完毕,请安心等待..."
ti(){
while true
do
        time=`date +"%Y-%m-%d %H:%M"`

        if [[ "${time}" == "${timing}" ]]
        then
                echo "定时任务:"
                #定时清理日志
                rm -rf ../logs/*
                #定时备份日志
                #定时执行脚本
                break
        fi
done
}
ti&

22、Linux查看线程的老二种植艺术

## ====================================================##
## auth:wonter                                                                                       ##
## date:2014-06-12                                                                                 ##
## to  :trust.sh                                                                                       ##
## ====================================================##
#!/bin/sh
trust(){
{
echo -e "\n"
} | ssh-keygen -t rsa -P ''

#参数
echo "请输入信任机ip:(提示:需输入三次密码!)"
read ip

#建立信任关系
cd ~/.ssh

scp -r id_rsa.pub $ip:/root/.ssh/$ip

ssh $ip 'touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys'

ssh $ip "cat ~/.ssh/$ip >> ~/.ssh/authorized_keys"
}
trust            
locate one.sh 
## ====================================================##
## auth:wonter                                         ##
## date:2014-06-12                                     ##
## path:javame.cnblogs.com                             ##
## ====================================================##
#!/bin/sh
#引用tool.sh脚本中方法
. ../tools/tool.sh
#Parameters
par
#Capture ip
#Capture path
config

21、链接数与经过数