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

Linux Shell篇之一:Shell编程简介

[复制链接]

尚未签到

发表于 2018-8-22 12:23:01 | 显示全部楼层 |阅读模式
  Linux Shell篇之一:Shell编程简介
  Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。简单来说Shell就是一个用户跟操作系统之间的一个命令解释器
  Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell脚本编程去运行。
  Linux Shell种类非常多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的Shell语言的语法有所不同,所以不能交换使用。
  最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,也是大多数Linux系统默认的Shell。
  第一个Shell脚本:
  vi  first_shell.sh
  #!/bin/bash
  #This is my First shell
  echo  “Hello  World !"
  执行Shell脚本:./或者sh、/bin/bash、.
  方法1:./   的前提:赋予执行权限x,才能执行!
DSC0000.jpg

  方法2:sh 或者/bin/bash 或者. 直接运行即可。
DSC0001.jpg

  认识变量
  Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。
  SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。
  定义这样一个变量A,前面变量名,后面是变量的值。引用变量可以使用$A,
  #!/bin/bash
  #author baishubing 201507
  A=12345
  echo "prinf varables equal is $A"
  把变量放在脚本里面,执行:
DSC0002.jpg

  注:简单的理解变量,相当于定义一个别名-名称,引用的时候加上$符号就可以了!
DSC0003.jpg

  参数-x:表示可以看到执行命令的过程!
DSC0004.jpg

  参数-n:表示在执行命令的过程判断是否有错误!
  一、SHELL常见的系统变量
  解析如下:
  $0 输出当前脚本的名称
  $n  输出当前脚本的第n个参数,n=1,2,…9
  $*  输出当前脚本的所有参数(不包括程序本身)
  $# 输出当前脚本的参数个数(不包括程序本身)
  $?  输出命令或程序执行完后的状态,一般返回0表示执行成功,其他值都表示不成功。
  $UID  输出当前用户的ID
  $PWD  输出当前所在的目录
  练习:系统变量
  例1:同时打印出$0、$n等参数:
  其中:\$0中的\表示转译,不把$0作为一个脚本或者变量来运行!
DSC0005.jpg

  结果输出:
DSC0006.jpg

  例2:练习系统变量:
  #!/bin/bash
  #auto print variables
  #by wugk 2014-09
  echo -e '\033[32m-----------------------------\033[0m'
  echo "This is $0 param !"
  echo "This \$1 is $1 param !"
  echo "This \$2 is $2 param !"
  echo -e '\033[32m-----------------------------\033[0m'
  echo "This \$* is $* param !"
  echo "This \$# is $# param !"
  echo "This \$? is $? param !"
  echo
  命令输出:
   DSC0007.jpg
  二、printf输出颜色
  printf("\033[字背景颜色;字体颜色m字符串\033[0m");
  printf("\033[41;32m字体背景是红色,字是绿色\033[0m\n");
  其中:41是字背景颜色, 32是字体的颜色, 字体背景是红色,字是绿色是字符串.
  后面的\033[0m是控制码
  颜色代码如下:
  QUOTE:
  字背景颜色范围: 40--49 字颜色: 30--39
  40: 黑       30: 黑
  41: 红       31: 红
  42: 绿       32: 绿
  43: 黄       33: 黄
  44: 蓝       34: 蓝
  45: 紫       35: 紫
  46: 深绿    36: 深绿
  47: 白色    37: 白色
  ANSI控制码:
  QUOTE:
  \033[0m 关闭所有属性
  \033[1m 设置高亮度
  \03[4m 下划线
  \033[5m 闪烁
  \033[7m 反显
  \033[8m 消隐
  \033[30m -- \033[37m 设置前景色
  \033[40m -- \033[47m 设置背景色
  \033[nA 光标上移n行
  \03[nB 光标下移n行
  \033[nC 光标右移n行
  \033[nD 光标左移n行
  \033[y;xH设置光标位置
  \033[2J 清屏
  \033[K 清除从光标到行尾的内容
  \033[s 保存光标位置
  \033[u 恢复光标位置
  \033[?25l 隐藏光标
  \33[?25h 显示光标
  这样, 在某些时候就可以实现动态的输出!
  练习脚本颜色打印输出
  例1:带颜色打印输出
DSC0008.jpg

  输出效果:
DSC0009.jpg

  例2:练习LAMP安装菜单制作
DSC00010.jpg

DSC00011.jpg

  注:echo -e "\033[32mPlease Select your to Meunu!\033[0m"
  -e:表示扩展
  \033[32m-------\033[0m:是固定格式!
  32m---------0m:表示绿色在这行以及下面的行都显示绿色,并且次行颜色开始加深!
DSC00012.jpg

DSC00013.jpg

  注:[32m------[0m:表示:只是这行显示绿色!
  三、逻辑运算符
  解析:
  -f       判断文件是否存在 eg: if [ -f filename ]
  -d      判断目录是否存在 eg: if [ -d dir     ]
  -eq    等于 应用于:整型比较   -------相当于==
  -ne    不等于 应用于:整型比较
  -lt      小于 应用于:整型比较
  -gt     大于 应用于:整型比较
  -le     小于或等于 应用于:整型比较
  -ge    大于或等于 应用于:整型比较
  -a      双方都成立(and) 逻辑表达式 –a 逻辑表达式----相当于&&
  -o      单方成立(or) 逻辑表达式 –o 逻辑表达式--------相当于||
  -z       空字符串
  四、3种运算符号((  ))、[[  ]]、[  ]
  [ ],可以用于判断(字符串、目录、文件、大小、是否非空、数字比较);
  (( )),用于运算比较大小;
  ` `,用于字符的,运算比较大小;
  一个[ ],把里面的内容当成字符,来判断和运算;2个[ ],用于运算;
  (( ))的运算,只能用数学上的:+ -* /,而不能用逻辑运算符:-eq、-gt、lt等等!
  [    ]的运算,不能用数学上的:+ -* /,只能能用逻辑运算符:-eq、-gt、lt等等!
  ` `的运算,能用数学上的:+ -* /,也能用逻辑运算符:-eq、-gt、lt等等!
  一个[ ],用于数字运算的时候,“ ”可以去掉!但是用于运算字符的时候," "还是要加上!
  [[  ]]用于多个主机间,计算和:需要用&&替换-a;计算或:需要用||替换-o;以及其他的-gt等;
  [  ]用于判断字符相等,不要使用-eq,而是使用==来表示!
  练习[ ]、` `
DSC00014.jpg

DSC00015.jpg

  注:这里的[ -z "$1" -o -z "$2" ]:内容需要使用双引号,原因是:把$1、$2当成了字符串!而单引号'  '是转译的作用,也不能用!
  五、日期赋值运算
  date  +%Y%m%d
  date  +%Y-%m-%d
  先把当前的所有 /tmp/20150725全部替换成:¥DIR
  :%s#/tmp/20150725#$DIR#g
  如果把以上的日期格式的内容放在脚本中运行,会把当前的命令赋值到当前的目录中!
DSC00016.jpg

DSC00017.jpg

  注:`data +Y%-m%-d%`,其中的反引号,表示把里面的内容当成一个脚本来运行!


运维网声明 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-555127-1-1.html 上篇帖子: SHELL学习--shell脚本基础知识 下篇帖子: shell编程(二)---shell脚本说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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