zoukankan      html  css  js  c++  java
  • shell编程的笔记

    关于历史命令

    Shell相关

    !! 是上一次执行的命令

    !字符串  指执行最近一次以这个字符串开头的命令

    !$ 取出上一条命令最后一个单词或命令

      *匹配0个或多个字符         ?匹配一个字符

    Ctrl+z  暂停一个进程          fg(foreground)恢复这个进程到前台  bg(background)恢复这个进程到后台

    如果暂停多个进程,则可以使用jobs命令,查看进程编号 ,如1 或2。然后fg 和bg的时候后边加上这个编号,指定返回哪个进程。 如  fg 2

    Ctrl+c  结束掉一个进程

     env 显示所有环境变量

    set显示当前shell所有变量(包括自定义、环境变量

    设置变量时需要注意:

    a=b   b作为变量内容,等号两边不能有空格   ,变量内容带有特殊字符时,需要加上单引号

    如:  a=’str      heheh’

    单引号会使里边的特殊符号失去作用:

    比如:  a=’$abc’      那么a就是$abc

    a=”$abc”  那么a就是$abc变量的值

    变量里本身含有单引号,这就需要用双引号括起来了,变量里若含有双引号可以使用” 转义

     

     bash进入子shell,pstree可以查看

    父shell的变量,让子shell可以使用,需要命令 export 一下

    释放一个变量  unset 

    管道符 |

    如: 查看一个文件有多少行    cat  hi.txt | wc -l

    -----------------------------------------------------------------------

    变量定义

    #x='fff'

    #echo $x

    #x="$x"hehe

    #export x   (使之成为环境变量)

    ===============

    追加一个目录如/root 到环境变量PATH

    # PATH=$PATH:/root

    # echo $PATH

    ===============

    #bash  (子shell)

    #pstree

    set (查看所有变量)

    env (查看环境变量)

     ----------------------

    查看当前语系

    locale

    echo $LANG

    echo $LC_ALL

    ------------------------

    位置参数变量

    $n 第几个参数

    $* 全部变量 整体对待

    $@ 全部变量 单独对待

    $# 参数个数

    ---------------------

    shell脚本开头一行

    #!/bin/bash

    ---------------------

    预定义变量

    $?   (返回上一条命令执行正确否 0正确)

    ---------------------

    read -p -s 用户输入的字符赋给变量

    --------------------

    declare -i -a -x(export) -p    变量声明为一个类型   -i整型 -a数组 -x环境变量 -p变量属性

    ---------------------

    配置文件

    配置文件加载顺序图

    -----------------------------

    欢迎信息  /etc/motd

    --------------------------

    正则&&通配符

    ----------------------------------

    字符操作命令

    cut   (比较适合规律的列文档    -f 列    -d分界符

     -----------------------------------

    printf

    awk

    # awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s ",$4,$5,$6}'  netstat.txt

    $0 当前记录(这个变量中存放着整个行的内容)

    $1~$n 当前记录的第n个字段,字段间由FS分隔

    查看文件系统/dev/root下的使用率:

    df -h | grep "/dev/root" | awk '{print $5}' | cut -d '%' -f 1

    -------------------------------------

    sed

    点击酷壳网这个也不错

    ---------------------------------------

    sort

    wc

    --------------------------------------

    插播个知识点:软硬连接

    软连接类似于快捷方式,不同的i节点,删原文件,另一个打不开;硬链接就是一个文件,相同i节点,他俩名字不同而已,删除一个,另一个仍然访问。

    ---------------------------------------

    标准输入输出的知识点:

    标准输入:

      键盘  /dev/stdin   文件描述符0

    标准输出:

      显示器  /dev/stdout   文件描述符1(标准正确输出)

    标准错误输出:

      显示器  /dev/stderr   文件描述符2

    比如:

    标准正确输出的重定向: #echo 'aaa' 1> test1.log

    有可能我的命令出错了,此时可以把这个报错信息标准错误输出。比如echoz命令写错了,(>>是追加文件,而不是覆盖)

    标准错误输出的重定向: #echoz 'bbb' 2>> test2.log

    正确和错误的输出同时重定向到一个地方,这种场景比较多见:这样格式  2>&1放在后头

    #echoz  'ccc' >> test3.log 2>&1

    或者这样格式:  #date &>> test3.log

    正确输出放到一个地方,错误输出放到一个地方(分开保存,/dev/null是空设备:

    #echo 'ddd'  >> test4.log  2>>/dev/null

     ======================================

    shell判断符号,推荐[[  ]],语法要求:中括号内容左右两边留有空格

    test -e /data/www/index.php

    [ -e /data/www/index.php ]

    [[  -e /data/www/index.php ]]

    ------------------------------

    分支判断语法

    注意:if要以if收尾。类似do以done收尾。case以esac收尾;

    if后要有then,如果then不换行,那么then前边要有个分号;else后则不需要then;

    elif的关键词;

    #!/bin/bash
    
    a='bb' #赋值操作等号两边不能有空格
    
    if test -e "./test.sh"
     then echo 'exists'   #if 后有then
    else echo 'no exists'  # else后没有then
    fi
    
    if [[ -n ${a}  ]]  
      then echo ${a} 
    fi
    
    b=123
    if [ ${b} -eq 123 ]
      then echo '$b='"$b"  #输出$b=123 这里注意单双引号的区别
    fi
    
    echo 1+1  #输出 1+1
    
    echo $((1+2)) #输出3

    shell的几种常用的循环方式:

    #!/bin/bash
    
    for i in 1 2 3 
    do
     echo $i
    done
    
    echo 
    
    
    for j in {1..10}
    do
      echo $j
    done
    
    
    for file in "./*"
    do 
     echo $file
    done
    
    
    
    for file in $(ls) 
    do 
     echo $file
    done

    比如现在文件夹下有n个文件,只有名字是a.txt的不想删除,其他都要删。可以利用xargs

    比如: ls | grep -v a.txt | xargs rm -rf 

    ${var:-word}这个意思是如果var这个变量存在且不为空,就返回var,否则返回word

    点击慕课网这个入门也很好

  • 相关阅读:
    Retrofit的使用
    解决Android Studio在Ubuntu上出现“sdk/platform-tools/adb: error=2, No such file or directory”的方法
    safair浏览器页面局部滑动问题
    App网络测试
    App测试理论简介
    JS -- 流程控制语句
    JS -- DOM(文档对象模型)
    JS -- 操作符和数组
    JS -- 基础语法1
    JS -- JavaScript简介
  • 原文地址:https://www.cnblogs.com/firstForEver/p/4834766.html
Copyright © 2011-2022 走看看