zoukankan      html  css  js  c++  java
  • shell基础命令

     内置判断

    -e file 如果文件存在,则结果为真

    -d file 如果文件是一个子目录,则结果为真

    -f file 如果文件是一个普通文件,则结果为真

    -r file 如果文件可读,则结果为真

    -s file 如果文件长度不为0,则结果为真

    -w file 如果文件可写,则结果为真

    -x file 如果文件可执行,则结果为真

    if 结构

    if [ condition ] ; then  ··· ; fi

    if [ condition ] ; then  ··· ; else ··· ; fi

    if [ condition ] ; then  ··· ; elif ··· ; fi

    简单的逻辑可以使用&& || 去替代

    条件可以用命令返回指代替

    [ 2 -eq 2 ];echo $?
     [ 2 -eq 3 ];ehco $?
     [ 2 -eq 3 ];echo $?
     [ 3 -lt 3];echo $?
     [ 3 -lt 3 ];echo $?
     [ 3 -le 3 ];echo $?
     [ 2 -ge 1 ];echo $?
    [ 2 -ge 1 -a 3 -ge 4 ];echo $?
    [ 2 -ge 1 -o 3 -ge 4 ];echo $?
    if [ -e 1.sh ];then echo exist; else echo not exist; fi
     if [ -e rrr ];then echo exist; else echo not exist; fi
     [ -e 1.sh] && echo exist || echo not exist
     [ -e 1.sh ] && echo exist || echo not exist
     echo "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8"|| echo "9"

    for 循环

    for (( c1; c2; c3 ));

    do

    ··· ;

    done

    for (( i=0;i<10;i++ ));do echo $i;done

    for 遍历循环

    用以递归数据,也可用以空格隔开的字符串序列,或者是某个命令的返回值;

    for f in ${array[*]};

    do 

    ···;

    done

    sss = "aa bb cc dd";for x in sss; do echo $x;done

    for x in `ls`;do echo $x;done

    ss=(aa bb "cc dd");for x in ${ss[*]};do echo $x;done

    每隔1秒,取出进程所占cpu和内存数

    for i in $(seq 1 20);do time=$(date +%H:%M:%S);info=$(ps -o %cpu -o %mem 2316);echo $time $info;sleep 1;done

     while 循环

    i=0;while [ $i -lt 3 ];do echo $i; ((i=i+1));done

    一个有用的小技巧,一行行的读取文件:

    while read line;do echo $line;done < /tmp/tmp

    while read x; do echo input is $x; done

    while read a b;do [ $b -gt $a ] && echo "b>a" || echo "b<a";done

    while read x;do echo $x;done < 3  输出重定向,在屏幕上输出 ; >3输入重定向,内容不在屏幕上输出,输入到文件3里面

    echo "hello to testwwwold" >> 1 文件的最后进行追加,而不是覆盖

    read a;echo $a 输入到内容在屏幕上输出

    read -p "enter:" a;echo $a

    for f in *; do echo $f;if [ -d $f ];then break;fi;done //打印所有到文件,如果文件是目录,就退出

    for f in *;do echo $f;if [ -f $f ];then echo $f is file;else continue;fi;done


    shell运行环境

    bash是一个进程;

    bash下还可以重新启动一个shell,这个shell是sub shell,原shell会复制自身给它

    在sub shell中定义变量,会随着sub shell的消亡而消失

    ()子shell中运行

    {}当前shell中运行

    $$当前脚本执行的pid

    &后台执行

    $!运行在后台的最后一个作业的PID(进程ID)

    echo $$

    (a=1;echo $a);echo $a //小括号里面是引用子进程里面的内容

    { a=2;echo $a;};echo $a; //{}是在当前shell里面运行

    sleep 10& 放在后台运行 jobs查看运行的状态

    ps

    ps -ef显示全部进程

    sleep 50 ctr+z 然后执行bg 3调入后台执行 fg 3调入前台执行

    shell环境变量

    shell首先是一个工作环境,有很多变量可以供我们使用

    set可以获得当前的所有变量

    env 可以获得传递给子进程的变量

    export aa=bbb把私有变量导出 

    ll -al 可以查看所有的文件(包括隐藏文件)

    chmod +x wulala.sh 增加可执行权限

    bash wulala.sh 执行文件

    curl -s http://www.baidu.com/s?wd=map3 | grep "结果约"      -s去掉统计信息  

    curl -s http://www.baidu.com/s?wd=map3 | grep -o "结果约"

    curl -s http://www.baidu.com/s?wd=map3 | grep -o "结果约[0-9,]*" 匹配的结果是:结果约13,100,000

    curl -s http://www.baidu.com/s?wd=map3 | grep -o "结果约[0-9,]*" | grep -o "[0-9,]*" 匹配的结果是:13,100,000

    vim baidu.keyword

    mp3
    mp4
    android
    ios

    while read k;do echo $k; curl -s http://www.baidu.com/s?wd=$k;done < baidu.keyword | grep -o "结果约[0-9,]*"

    匹配的结果是:

    结果约64,300,000
    结果约55,900,000
    结果约58,500,000
    结果约56,100,000

      

    curl icanhazip.com

    a=`curl -s https://testerhome.com/topics | grep -o 'href="/topics/[0-9]*"'| awk -F '/|"' '{print $4}'`;for id in $a;do url="https://testerhome.com/topics/"$id;zan=`curl -s $url | grep -o -m1 '<span>[0-9]*'| awk -F '>' '{print $2}'`;if [ -n "$zan" ];then echo $url "点赞人数为:" $zan;else echo $url "点赞人数为:" 0;fi;done | awk -F '/' '{print $NF}'
    -m1:选取第一行  NF选择最后一行

    循环输入内容,如果输入的值为quit,退出循环

    functest(){
    while true
    do
    read -p "please enter:" var_a
    if [ ${var_a} == "quit" ]
    then
    break
    else
    echo ${var_a}
    fi
    done

    }


    functest

    输入两个数值,并进行四则运算

    functest(){
    read -p "请输入第一个数:" var_a
    read -p "请输入第二个数:" var_b
    echo "$((${var_a} + ${var_b}))"
    echo "$((${var_a} - ${var_b}))"
    echo "$((${var_a} * ${var_b}))"
    echo `awk "BEGIN{print "$var_a"/"$var_b"}"`
    }

    functest

    curl https://testing-studio.com/ | grep href | grep -o "https[^"']*"

    curl -I https://www.baidu.com  -I 发起个头请求

    curl -s https://testing-studio.com/ | grep href | grep -o "http[^"']*" | while read line;do curl -s -I $line | grep 200 && echo 200 $line|| echo error $line;done 对官网进行链路追踪

    找出nginx.log中访问量最高的网页地址

    awk '{print $7}' /tmp/nginx.log | awk -F '?' '{print $1}' | sort | uniq -c | sort -nr | head -5

    求topics/nnn接口的平均响应时间(最后一列为响应时间)

     awk '$7~/^/topics/[0-9]{3}/{sum+=$(NF-1)}END{print sum/NR}' nginx.log

    seq 10 | grep '^.$'

    seq 10 | grep '^..$'

    seq 10 | grep -E '5|7' 扩展表达式,可以选出5和7    |匹配多个表达式中的任何一个

    seq 10 | grep -oE '(5|7)|(10)'  ()分组

    echo '1|2#3_4' | awk -F '#|_|\|' '{print $2}'
    2

    echo '1|2#3_4' | awk 'BEGIN{FS="#|_|\|";OFS="-"}{print $1,$2,$3,$4}'
    1-2-3-4

    echo '1|2#3_4' | awk 'BEGIN{RS="#|_|\|";OFS="-"}{print $1,$2,$3,$4}'  RS 行分隔符
    1---
    2---
    3---
    4---

    echo '1|2#3_4' | awk 'BEGIN{RS="#|_|\|"}{print $1}'
    1
    2
    3
    4

    echo '1|2#3_4' | awk 'BEGIN{RS="#|_|\|";ORS="*"}{print $1}' ORS将每一列拼接起来
    1*2*3*4*

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}'  RS指定列行分隔符
    /usr/local/bin
    /usr/bin
    /usr/local/sbin
    /usr/sbin
    /home/16116374/.local/bin
    /home/16116374/bin
    /home/16116374/test
    /home/16116374

    awk 'BEGIN{print 3*7}'
    21

    awk 'BEGIN{print 3/7}'
    0.428571

    awk 'BEGIN{printf "%f ", 1/3}'
    0.333333

    awk 'BEGIN{printf "%f ", 1/3}'
    0.333333

    seq 10 2 20
    10
    12
    14
    16
    18
    20

    seq 10 2 20 | awk '{sum+=$1}END{print sum}'
    90

    seq 10 2 20 | awk '{sum+=$1}END{print sum/NR}'
    90

    seq 10 2 20 | awk '$1 > 14'
    16
    18
    20

    seq 10 | sed -n '3p'  打印第三行数据,p是print
    3

    $ seq 10 | sed '3d'
    1
    2
    4
    5
    6
    7
    8
    9
    10

    seq 10 | sed 's/1/xxx/'
    xxx
    2
    3
    4
    5
    6
    7
    8
    9
    xxx0

    seq 10 | sed 's/1$/xxxx/'
    xxxx
    2
    3
    4
    5
    6
    7
    8
    9
    10

    seq 11 21 | sed 's/1/xxxx/'
    xxxx1
    xxxx2
    xxxx3
    xxxx4
    xxxx5
    xxxx6
    xxxx7
    xxxx8
    xxxx9
    20
    2xxxx

    seq 11 21 | sed 's/1/xxxx/'
    xxxx1
    xxxx2
    xxxx3
    xxxx4
    xxxx5
    xxxx6
    xxxx7
    xxxx8
    xxxx9
    20
    2xxxx

  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/godlove/p/11359576.html
Copyright © 2011-2022 走看看