设为首页 收藏本站
查看: 889|回复: 0

shell编程知识点总结(一)

[复制链接]

尚未签到

发表于 2018-8-23 13:24:17 | 显示全部楼层 |阅读模式
  灵活的运用shell编程的技巧及相关知识会让我们的shell编程有很大的提高,所以基础知识还是很有必要去认真的学习的
  脚本基本用法理解
  


  • 脚本必须以#!开头 #!/bin/bash
  • # 注释行,不执行 除此外都是脚本的有效执行部分
  • 执行一个脚本 ./first.sh   bash first.sh 或把当前路径添加到PATH中
  • 反引号是命令的执行结果
  • then的前面要加分号,不加分号then放到下一行
  • bash 测试(-n –x)
  • 测试脚本是否有语法错误 bash -n 脚本(模糊测试)
  • bash -x 脚本 (执行脚本):单步执行
  • exit:退出脚本
  • exit 后跟数值(0-255) 0是正确数值执行状态结果
  • 如果脚本没有明确定义退出状态码,那么最后执行的一条命令的退出码就是脚本的退出码
  

  变量
  


  • 变量是内存空间,是命名的内存空间 内存:是编址的存储单元 进程:临时存储数据需要变量
  • 变量名称
  • 只能包含字母、数字和下划线,并且不能以数字开头;
  • 不应该跟系统中已有的环境变量重名
  • 最好见名思意
  • 变量类型:事先确定数据的存储格式和长度
  • 数值
  • 整型 :8bit :0-255
  • 浮点型:11.13a  带小数点,带精度的
  • Shell变量问题(各种变量介绍—环境,本地,特殊等)
  • 与:只要一个为假结果一定为假
  • shell弱类型编程语言
  • 强:变量在使用前,必须事先声明,甚至还需要初始;
  • 弱:变量用时声明,甚至不区分类型

  • 变量赋值:VAR_NAME=VALUE
  • bash变量类型对变量的作用范围以及变量本身的表示形式分类
  • 环境变量:(当前shell进程以及子shell进程)
  • 本地变量(局部变量):当前shell进程
  • 位置变量:$1,$2,....是位置变量
  • shift:轮替,可以隔开显示 shift可以剔除前n个参数
  • 特殊变量:$? $#:参数的个数
  • $*:参数列表 “$*”
  • $@:参数列表  “$@”
  • 本地变量
  • 引用变量:${},括号可以省略
  • 如果变量后加有字符时需花括号
  • 内部有变量需替换时用双引号否则用单引号
  • 局部变量
  • localVARNAME=VALUE:作用域为当前代码段
  • 环境变量:
  • 作用域为当前shell进程及其子进程。
  • export VARNAME=VALUE
  • 导出变量:export VARNAME=VALUE 定义的时候直接导出
  • VARNAME=VALUE先定义再用 export VARNAME 导出
  • 脚本在执行时会启动一个子shell进程:
  • 命令行中启动的脚本会继承当前shell环境变量
  • 系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
  • 程序执行后可能有两类返回值
  • $? :保存上一个命令的执行状态返回值
  • 1 程序执行结果
  • 2 程序状态返回代码(0-255)
  • 0: 正确执行
  • 1-255:错误执行  1,2,127(只是系统预留的有特殊意义,其他的用户可自己定义)

  • 查看当前shell的变量
  • Set
  • (不带任何参数与选项的set命令)
  • 查看当前shell的环境变量:
  • printenv
  • env
  • export
  • 脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
  • Export
  • export  PATH=$PATH:/usr/local/apache/bin在其后添加路径
  • export PATH=/usr/local/mysql/bin:$PATH
  • 撤消变量;
  • unset VARNAME撤消变量 不加$符
  

  条件测试的表达式
  


  • 字符测试
  • ==两个等于号或者一个= 前后要有空格两端有空格,否则是赋值;相等为真,不等为假
  • != :测试是否不等于,不等为真,否则为假
  • >:大于 一个字符串是否大于另一个字符串
  • ” /etc/passwd; then  :这其中的if直接取得的是命令的执行状态值 if可自己识别 if [ ! -e $file ], then echo "No $file." exit 8
  • 双分支的判断语句
  • if判断条件: then
  • statement1
  • statement2
  • else
  • statement3
  • statement4
  • ......
  • fi
  • 多分支的if语句
  • if 判断条件1;then
  • statement1
  • ....
  • elif 判断条件2; then
  • statement2
  • .....
  • elif 判断条件3; then
  • statement3
  • .......
  • else
  • statement4
  • ......
  • fi
  • case语句
  • 选择结构
  • case SWITCH in
  • valuel)
  • statement
  • ....
  • ;;
  • value2)
  • statement
  • ....
  • ;;
  • esac
  • 循环
  • 循环:进入条件,退出条件
  • for 变量 in 列表; do
  • 循环体
  • done
  • 例如:
  • for I in 1 2 3 4 5 6 7; do
  • 加法运算
  • done
  • 遍历完成之后,退出;
  

  引用变量或变量中的字符长度
  


  • 如:A=start ------判断A有多少个字符
  • echo ${#A} :引用变量名的长度(#号表示变量中所包含字符串的长度)
  • ${#VARNAME}:就可以取字符串的长度
  • 例如:
  • stty -F /dev/console size:可以查看物理终端一屏有多少行多少列
  • stty -F /dev/console size | awk '{print $2}' :可以取出一屏有多少列
  • 也可以写成:A=`stty -F /dev/console size`  ——>  echo ${A#*  }
  • 还可以写成:stty -F /dev/console size | cut –d’ ‘  -f2
  • echo ${A#*  }:表示从左往右找,找到第一个以空格为分隔符的把左侧的去了
  • echo ${A##*  }:从左往右找,找到最后一个空格,把前面的去了
  • 这两种分隔符的不同之处就是第一个空格为分隔符和最后一空格为个分隔符
  • 还有与之相反的一个
  

  变量赋值
  


  • ${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;
  • ${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;
  • ${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;
  • ${parameter:offset}
  • ${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的子串;
  • A=3 echo ${A:-39} 结果是:3
  • uset A echo ${A:-30 结果是:3
  

  经常使用的小方面
  


  • 数据黑洞
  • /dev/null:软件设备,软件模拟设备 bit bucket(数据黑洞)
  • id student $> /dev/null
  • read 后跟变量 read -p选项 ”PEOMPT“:变量1 变量2 -p后跟是echo输出相同 -t 设置超时
  

  知识点还不够全面,当学习到新的知识点时,会继续追加的



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-555586-1-1.html 上篇帖子: Shell中的特殊字符 下篇帖子: RMAN 备份案例-shell 脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表