ningleesherry 发表于 2018-8-17 09:13:16

Shell之一

  Shell
第1章 脚本语言的种类:
1.1 编译型语言
  定义:指用专用的编译器,针对特定的操作系统,将某种高级语言源代码一次性翻译成可被硬件平台直接运行的二进制机器码(具有操作数,指令,及相应的格式)这个过程叫做编译(./configuremakemakeinstall);编译好的可执行文件(.exe)可在相应的平台上运行(移植行差,但是运行效率高)
  典型的编译型语言有:CC++
1.2 解释型语言
  定义:指用专们的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言;相当于把编译型语言的编译连接过程混到一起同时完成的
  解释性语言执行效率较低,且不能脱离解释器运行,但它的跨平台性比较容易,只需要提供特定的解释器即可
  常见的解释性语言有:pythonruby
1.3 脚本语言
  定义:为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言
  常见的脚本语言有:javaScriptpythonshell
第2章 关于shell
2.1 查看系统中的shell
  # cat /etc/shells
  /bin/sh
  /bin/bash
  /sbin/nologin
  /usr/bin/sh
  /usr/bin/bash
  /usr/sbin/nologin
2.2 什么是shell?
  shell脚本语言是实现linux/unix系统管理及自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大都设计shell脚本的内容,每个合格的linux系统管理员或运维工程师,都需要能够熟练的编写shell脚本语言,并能够阅读系统及各类软件附带的shell脚本内容,只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作
2.3 什么是shell脚本?
  命令,变量和流程控制语句等有机的结合起来
  shell脚本擅长处理纯文本类型的数据,而linux中,几乎所有配置文件,日志,都是纯文本类型文件
第3章 脚本书写规范
3.1 脚本统一存放目录,便于管理
  # mkdir -p /server/scripts/
  # cd /server/scripts/
3.2 选择解释器:
  开头的#! 字符称为幻数,系统会根据#!后面指定的解释器来执行脚本中的内容
  # head -1 /etc/init.d/*
  ==> /etc/init.d/functions/etc/init.d/netconsole/etc/init.d/network/etc/init.d/README /dev/null 2>&1
  [ $? -eq 2 ] &&echo please input && exit
5.4 传参的使用:
  # cat test.sh
  #!/bin/bash
  #read -p "please 1:" name1
  #read -p "please 2:" name2
  expr $1 + $2>/dev/null 2>&1
  [ $? -eq 2 ] &&echo your input is error && exit
  # sh test.sh 1 1.2
  your input is error
第6章 变量的子串:
6.1 查看变量内容的字符个数
  # echo $name
  cache
  # echo ${#name}
  5
  # echo $name |wc -L
  5
6.2 删除最短匹配的字符串
  # echo $name
  abcABC123ABCabc
  # echo ${name#a*c}
  ABC123ABCabc
6.3 删除最长匹配的字符串
  # echo ${name##a*c}
6.4 从后至前删除最短匹配字符串
  # echo ${name%a*c}
  abcABC123ABC
6.5 从后之前删除最长匹配字符串
  # echo ${name%%A*c}
  abc
6.6 替换字符串
  # echo ${name/abc/666}
  666ABC123ABCabc
6.7 替换所有字符串
  # echo ${name//abc/666}
  666ABC123ABC666
6.8 变量子串说明:
  表达式
  说明
  ${parameter}
  返回变量$parameter的内容
  ${#parameter}
  返回变内容的长度(按字符),也适用于特殊变量
  ${parameterioffset}
  在变量${parameter}中,从位置offset之后开始提取子串到结尾
  ${parameter:offset:length}
  在变量${parameter}中,从位置offset之后开始提取长度为length的子串
  ${parameter#word}
  从变量${parameter}开头开始删除最短匹配的word子串
  ${parameter##word}
  从变量${parameter}开头开始删除最长匹配的word子串
  ${parameter%word}
  从变量${parameter}结尾开始删除最短匹配的word子串
  ${parameter%%word}
  从变量${parameter}结尾开始删除最长匹配的word子串
  ${parameter/pattem/string}
  使用string代替第一个匹配的pattern
  ${parameter//pattem/string}
  使用string代替所有匹配的pattern
6.9 shell特殊扩展变量说明:
  表达式
  说明
  ${parameter:-word}
  如果parameter的变量值为空或未赋值,则会返回word字符串并替代变量的值用途.如果变量未定义,则返回备用的值,防止变量为空值或因未定义而导致异常
  ${parameter:=word}
  如果parameter的变量值为空或未赋值,则设置这个变量值为word,并返回其值。位置变量和特殊变量不适用用途:基本同上一个${parameter>word},但该变量又额外给parameter变量赋值了
  ${parameter:?word}
  如果parameter变量值为空或未赋值,那么word字符串将被作为标准错误输出,否则输出变量的值。用途:用于捕捉由于变量未定义而导致的错误,并退出程序
  ${parameter:+word}
  如果parameter变量值为空或未赋值,则什么都不做,否则word字符串将替代变量的值
第7章 变量的数值计算:
7.1 仅支持整数的运算
  # echo $((a=1+1))
  2
  # echo $a
  2
  # echo $((1+1*6-2))
  5
7.2 延伸扩展:
7.2.1 自加
  # echo $((a++))
  2
  # echo $((a++))
  3
7.2.2 自减
  # echo $((a--))
  6
  # echo $((a--))
  5
7.3 expr命令
  1.      整数计算
  2.      判断扩展名
  3.      判断输入是否为整数,非整数返回值为2
  4.      计算变量的长度
  # expr 1 + 1
  2
  # echo $?
  0
  # expr 1 + 1.1
  expr: non-integer argument
  # echo $?
  2
  # echo $
  2
7.4 支持小数运算的命令
7.4.1 bc
  # echo 2.2+2.6 |bc
  4.8
7.4.2 awk
  # awk BEGIN'{print 1+1}'
  2
  # echo "7.7 3.8"|awk '{print ($1-$2)}'
  3.9
7.4.3 python
  # python
  Python 2.7.5 (default, Nov 20 2015, 02:00:19)
   on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  >>> 1+1
  2

页: [1]
查看完整版本: Shell之一