nidr 发表于 2018-8-25 14:12:18

linux之shell基础

  shell编程:
  编译器,解释器
  编程语言:机器语言、汇编语言、高级语言
  静态语言:C C++ JAVA C#强类型(变量)事先转换成可执行格式
  编译型语言   开发环境不需要借助额外的二进制程序,直接写代码用编译器将其直接转换为二进制可以独立运行的
  动态语言:解释型语言PHP SHELL python per1 弱类型 不是绝对的 边解释边执行
  面向过程:shell C               解决问题过程
  面向对象:java Python per1 C++    定义对象执行的动作
  变量:内存空间,命名
  内存:编制的存储单元
  linux内核就是面向过程的C语言开发的 ,每种语言只有更适应它的地方
  变量类型:事先确定数据的存储格式和长度
  字符
  数值 整型 浮点型11.23 1.123*10^1
  整型:8bit:256
  0-256 溢出
  变量:
  1,10000
  10:16bit
  10:1010,8bit
  逻辑:1+1>2
  逻辑运算:与(相乘)、或(相加)、非、异或(相同为零)
  1:真
  0:假
  shell:弱类型编程语言
  强:变量在使用前,必须事先声明,甚至还需要初始化:不一定初始化
  NULL:
  弱:变量用时声明,甚至不区分类型
  变量赋值:VAR_NAME=VALUE
  bash变量类型:
  环境变量
  本地变量(局部变量)函数
  位置变量
  特殊变量
  本地变量:bash:
  VARNAME=VALUE:作用域为整个bash进程
  local VARNAME=VALUE:局部变量只对当前代码有效
  name=tom
  echo "there are some ${name}s."
  引用变量:${varname},括号有时可省略
  双引号是将变量转换,单引号不作变量转换
  局部变量:
  local VARNAME=VALUE:作用域为当前代码段
  环境变量:作用域为当前shell进程及其子进程
  export VARNAME=VALUE
  VARNAME=VALUE
  export VARNAME
  “导出”
  export name=tom
  位置变量:
  $1,$2,....
  特殊变量:
  $?:保存上一个命令的执行状态返回值
  程序执行:可以能两类返回值:
  程序执行结果
  程序状态返回代码(0-255)
  0:正确执行
  1-255:错误执行 1、2、127系统预留了
  输出重定向:
  >
  >>
  2>
  2>>
  /dev/null:软件模拟的设备 ,bit bucket,位桶,理解成:数据黑洞 不显示信息
  撤消变量:
  unset VARNAME
  查看当前shell中的变量
  set 所有变量
  查看当前shell中的环境变量
  printenv
  env
  export
  animal=pig
  animal=$animal:goat
  echo $PATH
  export PATH=$PATH:/usr/local/apache/bin 添加路径在后面
  export PATH=/usr/local/apache/bin:$PATH添加路径在前面
  脚本在执行时会启动一个子shell进程:
  命令行中启动的脚本会继承当前shell环境变量:
  系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量:
  引用变量:${VARNAME},括号有时可省略
  a=2
  b=3
  c=$a+$b
  echo $c
  脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
  file /bin/ls
  shebang:指定程序的魔数
  必须以#!开头    后面是跟是以什么格式写的路径
  which 查看bash的位置
  #!/bin/bash   bash在bin目录下
  echo "Add user1 successfully." 显示执行成功
  #注释行被忽略的
  pwd 查看当前路径
  PATH=/root:$PATH 将路径加入环境
  chmod u+x 1 添加文件的执行权限
  1 执行文件
  直接bash 1也可以
  条件判断:
  如果用户不存在
  添加用户,给密码并显示添加成功:
  否则
  显示如果已经存在,没有添加
  bash中如何实现条件判断?
  条件测试类型:
  整数测试
  字符测试
  文件测试
  条件测试的表达式:
  [ expression ]必须有一个空格
  `expression`关键字
  test + expression
  整数比较():
  A=3
  B=6
  [ $A -eq $B ]
  -eq:测试两个整数是否相等:相等,为真;不等,为假
  -ne:测试两个整数是否不等:不等,为真:相等,为假
  -gt:测试一个数是否大于另一个数:大于,为真;否则,为假
  -lt:测试一个数是否小于另一个数:小于,为真;否则,为假
  -ge:大于或等于
  -le:小于或等于
  id tom &> /dev/null && echo "hello,tom"

  !>  !表示反义词
  命令之间逻辑关系:
  逻辑与:&&
  第一个条件为假时,第二条件不用再判断,最终结果已经有
  第一个条件为真时,第二条件必须得判断
  逻辑或:||
  如果用户user6不存在,就添加用户user6
  id user6 || useradduser6
  如果/etc/inittab文件的行数大于100,就显示好大的文件
  ['wc -l /etc/inittab | cut -d' '-f1' -gt 100 ] && echo "large file."
  变量名称:
  1.只能包含字母,数字和下划线,并且不能数字开头
  2.不应该跟系统中已有的环境变量重名
  3.最好做到见名知意
  #!/bin/bash
  LINES='wc -l /etc/inittab'
  echo $LINES
  FINLINES=echo '$LINES | cut -d'' -f1'
  echo $FINLINES
  [ $FINLINES -gt 100 ]&& echo "/etc/inittab is big file"
  条件判断,控制结构:(最好用比与或更好理解)
  单分支if语句
  if 指定判断条件;如果为真执行then
  statement1
  statement2
  .
  .
  else 否则
  fi   结束
  双分支的if语句
  if指定判断条件;如果指定为真then
  statement1
  statement2
  .
  .
  else 否则
  statement3
  statement4
  .
  .
  fi   结束
  USERID='id -u $NAME3'
  #!/bin/bash
  grep "\" /etc/passwd &> /dev/null
  RETVAL=$?
  if [ $RETVAL -eq 0 ];then
  USER='grep "\" /etc/passwd | wc -1'
  echo "The shells of $USER users is bash."
  else
  echo "No such user."
  fi
  ''引用命令的执行结果
  shell中如何进行算术运算表达式
  a=2
  b=4
  1.let 算术运算表达式
  let c=$a+$b
  2.$[算术运算表达式]
  c=$[$a+$b]
  3.$((算术运算表达式))
  c=$(($a+$b))
  4.expr算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
  c='expr $a + $b'

页: [1]
查看完整版本: linux之shell基础