当前位置: 首页 > news >正文

Shell编程

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

shell编程

shell变量的特点?

——弱类型

——默认字符串型(字符串型是不能直接进行加减乘除数值运算,因此需要进行数值运算时,需要将shell变量声明为数值型,不要使用默认值)

——可以把指令写到一个文件中,shell对这个脚本操作就可以一次执行多个操作。但是如果一条条执行会很麻烦,shell支持条件控制、循环嵌套特性


说明:

指定解析器

一定要在第一行执行解析器,我们使用的是bash,当然也可以使用python、ruby写脚本。

202826_7KYS_2312175.png

语句即命令

202853_s5YT_2312175.png

我们在学会一个命令时,放在命令行中就是命令,放到脚本中就是一条语句。

脚本中命令可以直接罗列,也可以包含到函数之中,通过呼叫函数名执行:

202923_XGV8_2312175.png

 

命令对空格敏感,脚本语句对空格变态地敏感!

位置参数

脚本语言:

202947_aXwg_2312175.png

203024_hOEN_2312175.png

引用第一个sh时,使用$0($表示位置)。$#代表一共多少个参数。

操作:

203048_oH7F_2312175.png

脚本不在当前shell执行

我们在执行任意一个脚本程序的时候,并不是在这个shell执行,而是新开一个shell,虽然我们看不到这个shell。

操作:

203112_LBJH_2312175.png

注:虽然得到了脚本的目的,但是当前目录并未改变,也就是说不是在这个shell中执行的操作。

其中vim中语句为:

203139_Sa90_2312175.png

如果想在当前shell执行语句:

203210_khq0_2312175.png

注:当前工作目录已经变了。




declare命令

——用来声明变量类型

格式:

223054_O7nJ_2312175.png

 

223123_w0J6_2312175.png

注:在这里要格外注意,我们需要添加一个声明时用“-”,而不是“+”。

举例:

223203_NdJE_2312175.png

把变量声明为数值型

223233_tv4v_2312175.png

注:这里我们可以明确看出,在默认情况下变量为字符型,因此c默认输出为11+22,如果想想要输出加法运算的结果,则需要将c声明为int类型(a、b不需要声明为int,因为声明c后,在进行a+b运算时会自动将后面进行转化)。

可以查看变量属性:

223259_4yBy_2312175.png

声明数组变量

223328_lP0B_2312175.png

操作:

223356_mkIT_2312175.png

注:在查看数组的时候,$后面需要添加{},在不加下标,直接以数组名给出时默认显示第一个数组元素,加上*时,显示全部。

声明环境变量

223424_BdJj_2312175.png

注:环境变量的声明实际上也是declare命令。-X表示声明为环境变量。如果这样操作:

Export aa,即表示把aa声明为环境变量,则在执行bash-->set这两个指令时只能看到aa,不能看见bb。Bb只会出现在当前目录。

声明变量只读属性

223452_IhWM_2312175.png

操作:

223519_YNVE_2312175.png

注:这里不能修改和删除。甚至我们执行撤销属性都不可以。在实际应用中要格外注意,如果将制度属性的变量加到某一系统环境变量中在开机时会自启动,这样会出错。我们这里设置的是临时环境变量,系统重启后消失。因此,只读属性并不是很好用,实际中尽量少用。

查看变量属性

223547_RiH8_2312175.png

数值运算方式

数值运算方法1

223616_uc8S_2312175.png

注:这种方法需要敲很多指令,麻烦。

方法2exprlet数值运算工具

223644_cjyM_2312175.png

操作:

223709_JGKy_2312175.png

注:在没有空格的时候不会进行直接加的运算,而是当做字符串运算。

223738_IpXS_2312175.png

 

方法3:”$((运算符))”或”[运算符]

223805_Ql1w_2312175.png

注:推荐这种写法”$((运算符))”

区分以下的方式:$(运算符)——它的作用是把系统命令先执行,再把命令的结果赋予变量。

223834_zrzj_2312175.png

 

223902_R614_2312175.png

 

运算符

223929_DKKt_2312175.png

注:优先级越高数值越大。实际中用到的数值运算并不多。

变量测试

简介

只针对shell语言有效,比较复杂。在实际中可以用其他方式取代,格式复杂,语法简单,了解即可。

223957_u7Hs_2312175.png

注:在优化时用到,比如php写的网页脚本,访问量很大,就需要优化。在实际中shell一般是管理员用(因为我们的目的就是办公自动化),所以要求逻辑要清晰,而这种方式并不是很适用。

例子1:测试x=${y-新值}

224025_FY55_2312175.png

 

224059_GbHA_2312175.png

 

循环控制

脚本

203237_xngu_2312175.png

 203304_wtcN_2312175.png

但是这个脚本有局限性,就是引入另外一个文件再执行这个脚本时不起作用,也就是说这个文件只针对于某一个特定情况。需要改进:

在tab上方有导引号``,如果在vim中输入命令:形如’pwd’,导引号就能输出命令的输出。

203342_YmuO_2312175.png

这样脚本就具有通用型了。

 

远程执行

每次都连接服务器还是有点麻烦,我们可以在本地执行一个脚本,直接把服务器上的事办了。

203408_RCYN_2312175.png

注:引号中的语句就会在服务器中执行。

 

确认执行:

203435_vDu3_2312175.png

默认是y。

但是如果有一天我们删除了其中一个很有用的文件,比如jim.txt再执行脚本时:

 203504_CKOU_2312175.png

203526_Snky_2312175.png

这时会提示是否删除删除这个脚本,这种提示功能非常好。我们可以选择no不删除。

 

用其他语言写脚本

Bash的语法偏机器思维。比较晦涩。




转载于:https://my.oschina.net/u/2312175/blog/643871

相关文章:

  • 构建自己的PHP框架--创建组件的机制
  • 闲扯 『 document.write 』
  • 【vSphere故障案例】案例九:ESXi主机HA未配置错误
  • 在Mac上关于tomcat服务器的安装、配置、启动、部署web详细流程
  • git分享(二)git checkout
  • Android源码大放送之material design类型
  • 国内收益最高的聚合平台--KeyMob移动广告聚合平台
  • SQL 存储过程返回值
  • 利用excel办公软件快速拼凑sql语句
  • 如何利用又拍云玩转live photo,没有6S也能玩
  • PHP异常处理
  • Java之IO流总结
  • Java NIO系列教程(三) Buffer
  • 解决HP打印机错误:Couldn't open fifo
  • 第二章 策略模式
  • 收藏网友的 源程序下载网
  • 230. Kth Smallest Element in a BST
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • echarts的各种常用效果展示
  • Flex布局到底解决了什么问题
  • JavaWeb(学习笔记二)
  • Java读取Properties文件的六种方法
  • Java知识点总结(JavaIO-打印流)
  • JS数组方法汇总
  • LeetCode算法系列_0891_子序列宽度之和
  • Python进阶细节
  • python学习笔记-类对象的信息
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue ES6 Jade Scss Webpack Gulp
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从输入URL到页面加载发生了什么
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 跨域
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 智能网联汽车信息安全
  • Linux权限管理(week1_day5)--技术流ken
  • PostgreSQL之连接数修改
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #AngularJS#$sce.trustAsResourceUrl
  • #if和#ifdef区别
  • #pragma once
  • #QT(智能家居界面-界面切换)
  • #前后端分离# 头条发布系统
  • (C#)一个最简单的链表类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二)学习JVM —— 垃圾回收机制
  • (六)vue-router+UI组件库
  • (十六)一篇文章学会Java的常用API
  • (四)linux文件内容查看
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解