Shell编程

一、echo输出命令

  1. echo [选项] [输出内容]

  2. -e:支持反斜杠控制的字符转换

二、将Windows格式转换成linux格式

  1. dos2unix 文件名

三、别名

  1. alias 别名=值

  2. 修改/root/.bashrc

  3. 删除别名:unalias 别名

四、输出重定向

  A、标准输出重定向:

    1. 命令 > 文件:以覆盖方式把命令的正确输出输出到指定文件或设备

    2. 命令 >> 文件:以追加方式把命令.....

  B、标准错误输出重定向:

    1. 错误命令 2> 文件:以覆盖的方式,把命令的错误输出输出到指定的文件或设备

    2. 错误命令 2>> 文件:以追加方式,把命令....

  C、正确和输出同时保存:

    1. 命令 > 文件 2>&1

    2. 命令 >> 文件 2>&1

    3. 命令 &> 文件

    4. 命令 &>> 文件

    5. 命令 >>文件1 2>>文件2:把正确的输出追加到文件1,把错误的输出追加到文件2

  D、/dev/null:垃圾箱

五、输入重定向

  A、wc 【选项名】 【文件名】

    1. -c:统计字节数

    2. -w:统计单词数

    3. -l:统计行数

六、多命令顺序执行

  A、;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系

  B、&&  命令1&&命令2  逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行

  C、||  命令1||命令2  逻辑或,当命令1执行不正确命令2才会执行,当命令1正确执行,则命令2不会执行

  D、dd if=输入文件 of=输出文件 bs=字节数 cout=个数

    1. if=输入文件  指定源文件或源设备

    2. of=输出文件  指定目标文件或目标设备

    3. bs=字节数  指定一次输入/输出多少字节,即把这些字节看做一个数据块

    4. count=个数  指定输入/输出多少个数据块

    5. date;dd if=/dev/zero of=/root/testfile bs=1k count=10000;date  查看执行需要多长时间

七、管道符:命令1 | 命令2  #命令1的正确输出作为命令2的操作对象

八、grep [选项] "搜索内容" 文件名

  1. -i:忽略大小写

  2. -n:输出行号

  3. -v:反向查找

  4. --color=auto 搜索出的关键字用颜色显示

九、通配符

  1. ? 匹配一个任意字符

  2. *  匹配0个或多个任意字符

  3. []  匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c

  4. [-]  匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母

  5. [^]  逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符

十、Bash中其它特殊符号

  1. ''  单引号。在单引号中所有的特殊符号都没有特殊含义

  2. ""  双引号。在双引号中特殊符号都没有特殊含义,但是"$"、“`”和"\"是例外

  3. ``  反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,推荐$(),因为``容易看错

  4. $()  和反引号作用一样

  5. #  在shell脚本中,#开头的行代表注释

  6. $   用于调用变量的值,如果需要调用变量name的值时,需要用$name的方式得到变量的值

  7. \  转义符,跟在\之后的特殊符号将失去特殊含义

十一、Bash的变量

  A、用户自定义变量

  B、环境变量

    1. 设置:export 变量名=变量值

    2. 查询:env

    3. 删除变量名:unset:变量名

  C、位置参数变量

    1. $n  n为数字,代表第几个参数

    2. $*  所有参数,当成一个整体

    3. $@  所有参数,把每个参数区别对待

    4. $#  代表所有参数的个数

  D、预定义变量

    1. $?  最后一次执行的命令的返回状态。如果是0,代表上条命令正确执行。

    2. $$  当前进程的进程号(PID)

    3. $!  后台运行的最后一个进程的进程号(PID)

十二、接收键盘输入

  A、read [选项] [变量名]

    1. -p  “提示信息”:在等待read输入时,输出提示信息

    2. -t  read会一直等待用户输入,使用此项可以制定个等待时间

    3. -n  字符数:read命令只会接受指定的字符数,就会执行

    4. -s  隐藏输入的数据,适用于机密信息的输入

十三、Bash的运算符

  A、数值运算与运算符

    1. declare 声明变量类型: declare [+/-] [选项] 变量名

      a. -  给变量设定类型属性

      b. +  取消变量的类型属性

      c. -i  将变量声明为整数类型

      d. -x  将变量声明为环境变量

      e. -p  显示指定变量的被声明类型

    2. expr或let数值运算工具

      a. aa=11 bb=22 dd=$(expr $aa + $bb)

      b. 注意:+号左右两边必须有空格

    3. “$((运算式))”或“$[运算式]”

  B、变量测试与内容替换

    1. x=${y-新值}  如果y没有设置,x为新值。y为空,x为空。y有值,x为y。

    2. x=${y:-新值}  如果y没有设置,x为新值。y为空,x为新值。y有值,x为y。

  C、环境变量配置文件

    1. 使配置文件立即生效:  source 配置文件  或者  . 配置文件

    2. 配置文件:

      a. /etc/profile

      b. /etc/profile.d/*.sh

      c. ~/.bash_profile

      d. ~/.bashrc

      3. /etc/bashrc

十四、字符截取命令

  A、cut提取命令

    1. cut [选项] 文件名

      a. -f序号:提取第几列

      b. -d分隔符:按照指定分隔符分割列

  B、printf命令

    1. printf '输出类型输出格式' 输出内容

      a. %ns:输出字符串。n是数字指代输出几个字符

      b. %ni:输出整数。n指代输出几个数字

      c. %m.nf:  输出浮点数。m和n是数字,指代输出的整数位数和小数位数

  C、awk命令

  D、sed [选项] '[动作]' 文件名

    1. 选项

      a.-n   一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed处理的行输出到屏幕

      b. -e  允许对输入数据用多条sed命令编辑

      c. -i   用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

    2. 动作

      a. a \:  追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据完结

      b. c \:  行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据末完结

      c. i \:  插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“\”代表数据完结。

      d. d:  删除,删除指定的行

      e. p:  打印,输出指定的行

      f. s:  字串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字符串/新字符串/g ”

十五、字符处理命令

  A、sort [选项] 文件名

    1. -f:忽略大小写

    2. -n:以数值型进行排序,默认使用字符串型排序

    3. -r:反向排序

    4. -t:指定分隔符,默认分割符是制表符

    5. -k n[,m]:按照指定字段范围排序。从第n段开始,m字段结束(默认到行尾)

  B、统计命令:wc [选项] 文件名

    1. -l:只统计行数

    2. -w:只统计单词数

    3. -m:只统计字符数

十六、判断文件命令

  A、test [选项] 文件   或者  [[选项] 文件]

    1. -d  判断该文件是否存在,并且是否为目录文件(是目录为真)

    2. -e  判断文件是否存在(存在为真)

    3. -f  判断文件是否存在,并且是否是普通文件(是普通文件为真)

    4. -L  判断改文件是否存在,并且是否是符号链接文件(是符号链接文件为真)

    5. -b  判断文件是否存在,并且是否是块设备文件(是块设备文件为真)

    6. -c  判断文件是否存在,并且是否是字符设备文件(是字符设备文件为真)

    7. -p  判断文件是否存在,并且是否是管道文件

    8. -s  判断文件是否存在,并且是否为非空(非空为真)

    9. -S  判断文件是否储存在,并且是否为套接字文件

  B、然后用echo $? 判断上条命令是否执行成功  或者  [ -e 文件 ] && echo "yes" || echo "no"

  C、判断文件权限

    1.  -r  判断文件是否存在,并且是否拥有读权限

    2. -w  判断文件是否存在,并且是否该文件拥有写权限

    3. -x  判断文件是否存在,并且是否拥有执行权限

    4. -u  判断文件是否存在,并且是否拥有SUID权限

    5. -g  判断文件是否存在,并且是否拥有SGID权限

    6. -k  判断文件是否存在,并且是否拥有SBit权限

  D、两个文件比较

    1. 文件1 -nt 文件2  判断文件1的修改时间是否比文件2的新(如果新为真)

    2. 文件1 -ot 文件2  判断文件1的修改时间是否比文件2的旧(如果旧为真)

    3. 文件1 -ef 文件2  判断文件1和文件2的inode号是否一致(可以理解为是否是同一个文件,可以判断是否是硬链接)

  E、两个数之间比较

    1. 整数1 -eq 整数2  判断两个数是否相等

    2. 整数1 -nq 整数2  判断两个数是否不相等

    3. 整数1 -gt 整数2  判断整数1是否大于整数2

    4. 整数1 -lt 整数2  判断整数1是否小于整数2

    5. 整数1 -ge 整数2  判断整数1是否大于等于整数2

    6. 整数1 -le 整数2  判断整数1是否小于等于整数2

  F、字符串的判断

    1. -z 字符串  判断字符串是否为空

    2. -n 字符串  判断字符串是否非空

    3. 字符串1==字符串2  判断字符串是否和字符串2相等

    4. 字符串1!=字符串2  判断字符串1和字符串2不相等

十七、条件控制语句

  A、if语句

    1. 单分支if条件语句

      a. if [ 条件判断式 ] ; then

        程序

         fi

      b. if [ 条件判断式 ]

        then

          程序

        else

          程序

        fi

  B、case语句

    1. case $变量名 in

      "值1")

        如果变量的值等于1,则执行程序1

        ;;

      "值2")

        如果变量的值等于2,则执行程序2

        ;;

      *)

        如果变量的值都不是以上的值,则执行此程序

        ;;

  C、for循环

    1. for 变量 in 值1 值2 值3...

      do

        程序

      done

    2. for ((初始值;循环控制条件;变量变化))

      do

        程序

      done

  D、while循环

    1. while [ 条件判断式 ]

      do

        程序

      done

  E、until循环

    1. until和while相反

 

posted on 2020-02-05 22:54  DjanFey  阅读(173)  评论(0编辑  收藏  举报

导航