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

  • 相关阅读:
    php编译错误:jpeglib.h not found.
    php编译错误:Please reinstall the libcurl distribution
    php编译错误:Cannot find OpenSSL's <evp.h>
    php shmop windows 信号量锁
    vsftpd配置
    putty ssh 证书登录及问题
    mysql被收购 用mariadb
    centos 7 php7 yum源
    3dmax 欢迎页卡住
    用python进行服务器的监控
  • 原文地址:https://www.cnblogs.com/godlove/p/11359576.html
Copyright © 2011-2022 走看看