• shell笔记


    1 && ||
    ping -c1 www.baidu.com && echo "ok" || echo "no"
    2. expect perl java python shell
    3. cat 1.txt >> 2.txt
    4. python << -EOF(JWW)
    print "hello"
    EOF
    5. ./2.sh 子shell执行
    . 2.sh source 2.sh 当前shell执行
    6. /etc/profile 系统
    /etc/bashrc
    ~/.bash_profile 用户级
    ~/.bashrc
    ~/.bash_logout 离开的时候执行
    ~/.bash_history
    7. login shell {/etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc}
    nologin shell {/etc/bashrc ~/.bashrc}
    8.cat /etc/shells
    9. !1020 指定历史命令
    10. histroy shell历史命令
    11 head 命令?
    12 !string eg: !da 找到最近的一条以da开头的命令
    13 !$ 上一条命令的最后一个参数
    14 !! 上一条命令
    15 nohup sleep 10 &
    16 screen
    17 fg %1 bg %1 kill %3
    18 cat <1.txt >2.txt
    19 cat <<-EOF >file
    ...
    ...
    EOF
    20.管道 tee
    21 cd #到家目录
    22 ; 间隔两条命令 cd /home/444; ls 没有逻辑判断
    23 && || 具备逻辑判断 ./configure && make && make install
    24 true 返回真 false返回假
    25 &> 混合重定向
    26 [abc] 匹配一个
    ?1个
    * 任意多个
    () 在子shell执行
    \ 转义
    27 umask
    28. mkdir -pv /home/{333/{aaa,bbb},444}
    29. cp -rv ./memcmp.c{,.old}
    30. echo -e "\e[1;31mThis is a red text."
    echo -e "\e[1;30mThis is a red text."
    echo -e "\e[1;32mThis is a red text."
    echo -e "\e[1;33mThis is a red text."
    echo -e "\e[0m"
    echo -e "\e[1;30mThis is a red text.\e[0m"
    颜色30几 背景色40几
    31 printf
    32.type -a [
    33 export 环境变量 在当前shell和子shell中生效
    自定义变量在当前shell生效
    34 ./ping.sh 是在子shell执行
    35 echo ${#ip} 显示变量的长度
    36 env 所有的变量
    37 $1 命令行参数
    38 预定义变量
    $0 脚本名
    $* 所有的参数
    $@ 有的参数
    $# 参数的个数
    $$ 当前进程的pid
    $! 上一个后台进程的pid
    $? 上一个命令的返回值 0表示成功
    39. basename dirname mingl
    40 ``命令替换=$()
    41 read -n2 只读取前面的2个字符
    read -t5 = read -t 5 #等待5s,没有用输入就返回
    read name sex age 可以读取多个变量
    42 ""弱引用 ''强引用
    43.date +%F
    44 整数运算
    expr $num1 + $num2
    $((num1+num2))
    $[]
    let num=1+2
    45 free -m |grep 'Mem:' | awk '{print $3}'
    46 bash -vx 1.sh #调试的模式执行
    47 小数运算
    echo "2*4" |bc
    echo "2^4" |bc
    echo "scale=2;6/4" |bc
    awk 'BEGIN{print 1/2}'
    grep 'ServerIp1' iptvconfig.ini | awk -F"=" '{print $2}'
    echo "print (5.0/2)" |python3
    48 内容删除
    url=www.sina.com.cn
    echo ${url#www.}#删除www.
    echo ${url#*.}#删除到. 最短匹配
    echo ${url##*.}#删除到最后一个. 贪婪匹配
    echo ${url%.*}从后往前删到. www.sina.com
    索引及切片
    echo ${url%%.*}从后往前删到最后一个. www
    echo ${url:0:5} #0标识开始索引,5标识长度,长度省略就取到最后
    替换 / //
    echo ${url/sina/baidu}
    echo ${url//n/N}
    替代 - :-
    -没有定义过的变量会替代,定义过的变量就不能替代
    echo ${var1-11111}
    :-变量没有被赋值或空值会替代,被赋过值不会替代
    echo ${var:-222}
    扩展+ :+ = := ? :?
    49 unset var 重置变量
    50 []条件判断 -z 长度为0
    51调试
    sh -n 1.sh 仅调试语法错误
    sh -vx 1.sh 以调试的方式执行,查询整个执行过程
    52 test -d /home/xpy echo $?
    53. 字符串习惯性加上双引号
    54.seq
    55. 正则表达式 ^[0-9]+$ ^开头 +前面字符有1到多个 $结尾
    56 declare 定义类型
    57 单方括号不支持表达式,要使用2个方括号 [[ $num =~ ^[0-9]+$ ]]
    =~正则匹配
    58. case var in
    模式1)
    command1
    ;;
    模式2)
    command2
    ;;
    模式3)
    command3
    ;;
    *)
    command4
    esac
    59. command -v
    60 true = :
    61 脚本自启动把脚本的路径放在.bash_rc 或.bash_profile
    62 trap 捕捉信号
    63 echo -n 不换行
    64 函数跟c类似 func () {}
    65 uptime
    free -m
    66 clear = ctrl + l
    67 until false
    68 设置dns /etc/resolv.conf
    nameserver ****
    69 systemctl status httpd
    70 ss -tnlp |grep vsftpd
    netstat -tnlp |grep vsftpd
    71 IFS=$'\n' 更换分隔符
    72 echo "$ip" tee -a ip.txt
    73 for i in {2..254}
    74 >ip.txt 清空文件
    75 ping -c1 -W1 ip
    76 多个语句{}& 后台运行
    77 wait 等待后台进程执行结束
    78 time commad
    79 printf" ip:$ip"
    80 seq -w $num
    81 echo "$line" |awk '{print $1}'
    82 for是按照空格或tab分割的 #不适合处理文件
    83 `` = $()
    84 ssh $ip "sed -ri '/^#UseDNS/cUseDNS no' /etc/ssh/sshd_config"
    85 在命令行下验证, ssh $ip "grep 'DNS' /etv/ssh/sshd_config"
    86 while read user #适合处理文件,以行为单位。所以要单独处理空行
    do
    useradd $user
    done < user.txt
    87 until 和while完全相反 条件为false一直循环,为真则退出
    88 shell并发控制
    ll /proc/$$/fd (ubuntu暂时没找到对应的目录)
    exec 6<>file 打开一个文件
    exec 6<&- 关闭文件描述符为6的文件
    当一个文件描述符未被释放,即使删除文件,这个文件还在/proc/$$/fd
    lsof 列出打开的文件
    89 mkfifo fifo1 命名管道可以跨终端,并且读取一次就没有了
    匿名管道不可以跨终端
    90 echo >&8 #往8文件描述符里放一个换行 &8标识文件描述符为8的文件
    read -u 8
    91 vim set list 看是空格还是tab
    92 /usr/bin/expect <<-EOF <<之后不能有空格
    93 ssh-copy-id ip
    94 shell 关联数组
    declare -A info1
    info1=([name]=tianyun [sex]=male [age]=36 [height]=170) 需要先声明
    echo ${info1[name]} #访问一项
    echo ${info1[@]} #访问所有 = echo ${info1[*]}
    echo ${#info1[@]} #数组的个数
    echo ${!info1[@]} #数组的索引
    95 declare -a
    96 array=(1 2 3 4 5 6 7 "linuxshell" [20]=saltstack) #可以切片
    echo ${array[@]:6:2} 7 linuxshell
    echo ${array[@]:6:3} 7 linuxshell saltstack
    97 OLD_IFS=$IFS
    IFS=$'\n'
    IFS=$OLD_IFS
    98 watch -n1 a.sh #1s监控脚本的结果
    99 vim ctrl+v y p #复制部分行
    100 shell 函数
    函数名(){}
    function 函数名{}
    101 for((i=1;1<=10;i++))
    -------------------------------------
    102 ed行编辑器
    eg:ed back.c
    显示文件的字节数,包括字符串结尾标志
    n:显示第n行的内容
    103 统计最后一列的个数
    awk -F: '{shells[$NF]++} END{for(i in shells) {print i, shells[i]}}' passwd
    104 wc -l file #统计文件中有多少行
    105 awk使用外部变量,双引号的使用情况
    var="bash"
    echo "unix script" | awk "gsub(/unix/, \"$var\")"
    awk使用外部变量,单双引号的使用情况
    var="bash"
    echo "unix script" | awk 'gsub(/unix/, "'"$var"'")'
    106 int()取整数部分
    df -h | awk '{ if(int($5)>10){print $6,$5}}'
    107 awk参数-v, 注意变量var不用$
    echo "unix script" | awk -v var="bash" 'gsub(/unix/, var)'
    108 实战
    1)查看CPU利用率与负载(top, vmstat, sar)
    2)查看磁盘,inode利用率与i/o负载(df, iostat, iotop, sar, dstat)
    3)查看内存利用率(free, vmstat)
    4)查看cpu与内存占用最高的10个进程(top, ps)
    5)查看网络流量(ifconfig, iftop, iptraf)
    109 PS1# PS2 '>'
    PS3#脚本中的提示符
    110 select i in cat tiger duck pig
    do
    case "$i" in
    cat)
    command
    ;;
    tiger)
    command
    ;;
    quit)
    break
    ;;
    *)
    echo "error"
    exit
    ;;
    esac
    done
    111 打印第一列 cut -d' ' -f1== awk '{print $1}'
    112. ping -s 6000 ip
    113. chattr +i /etc/resolv.conf
    i:不得任意更动文件或目录
    114 ll -t;ll -rt
    115 tree
    116 截取字符串
    ${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
    ${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
    ${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
    ${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
    ${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
    ${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
    ${string%chars*} 从 string 字符串最后一次出现 *hars 的位置开始,截取 *chars 左边的所有字符。
    ${string%%*chars*} 从 string 字符串第一次出现chars 的位置开始,截取 *chars 左边的所有字符。

    117 shell读文件的三种方法
    while read line
    do
    echo $line
    done < filename
    ------------------
    cat filename | while read line
    do
    echo $line
    done
    -----------------------
    for line in `cat filename`
    do
    echo $line
    done
    -----------------------
    116 nginx -v
    sudo service nginx start
    sudo service nginx stop
    sudo nginx -s reload

     
  • 相关阅读:
    py二级习题
    js 闪烁的文字
    用windows 画图 裁剪照片
    JS 练习
    弧度制与角度制
    Knockout.Js官网学习(event绑定、submit绑定)
    js中进行金额计算 parseFloat 会产生精度问题,toFixed(2) 方法修正
    JQuery通过类选择器捕获click事件获取bai当前点击对象的id, javascript中onclick(this)用法介绍
    jQuery检查元素是否含有指定的class类,使用.hasClass()方法
    ajax的dataType有哪些类型?
  • 原文地址:https://www.cnblogs.com/xpylovely/p/16409187.html
Copyright © 2020-2023  润新知