一、什么是 Shell?

狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工作。

系统合法的 shell 均写在 /etc/shells 文件中。

二、Bash Shell 的基本操作技巧

1、查看前一次登录执行过的命令:vim ~/.bash_history
2、命令和文件补全功能(Tab键)
tab 接在一串指令的第一个字后面,则为命令补全
tab 接在一串指令的第二个字后面,则为文件补全
3、命令别名设定功能:alias
alias lm='ls -al'
4、程序化脚本(shell scripts)
5、通配符
 
6、换行输入 \ +[enter]
7、从光标向前或者向后删除字符串 [crtl]+u / [crtl] +k
8、从光标移动到整个指令串的最前面/最后面 [crtl] +a / [crtl]+e
9、使用 env 和 export 可观察环境变量;set 可以观察目前 bash 环境下的所有变量
10、连续命令中 ; 可以让两个命令连续执行:

  • && 前一个指令必须没有错误信息
  • || 如果正确就不执行第二条。错误接着执行第二条
 11、编码问题:LANG 或者 是 LC_ALL设置; locale 列出当前语种。
 12、查看别名的原代码 : type -a 别名命令
 13、列出所有的按键和按键内容:stty -a
 14、设定按键功能:stty erase ^h  : 设定crtl + h 向后删除字符
 15、获取核心版本:echo $(uname -r)
 
三、Shell Script
        概念:Shell script 是利用shell 的功能 所写的一个程序,这个程序是使用纯文本文件。将一些 shell 的语法与指令写在里面,搭配正则表达式、管线命令与数据流重导向等功能,以达到我们的处理命令。
        个人理解:其实Shell script 就是window 中的批处理命令,它将shell 指令、再加上一点脚本的语法 写出来的程序。shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了,因为shell scripts的速度较慢,且使用的CPU资源较多,造成主机资源的分配不良。
        变量:
 变量类型:bash变量类型默认为字符串,可以是整型或数组类型,没有浮点型,所以没有小数,1/3 结果是0.
 
 变量声明:默认为字符串,可以 直接声明为 变量名=变量内容(x=123)这样,如果要声明为数组或者整型可以:

  • 变量和变量内容以一个等号=连接,a=123
  • 等号两边不能直接接空格符
  • 由英文字母和数字组成,但开头不能是数字
  • 变量内容中如果有特殊字符,可以用""或''将变量内容结合起来
  • " "中 $变量,可以保留原本的特性
  • ' ' 中$变量,当成一般字符来处理
  • 可以用跳脱字符 \ 来使不认识的特殊字符来当成一般字符
  • ``或者()的意义:``或者()里面的指令先被执行,作为外部的输入信息
  • 将 - 变成 + 可以进行[取消]动作:declare +x sum :
  • 单独列出变量的类型:declare -p sum
  • 升级成环境变量:export PATH
  • 取消变量 :unset a
  • 数组定义:var[1]="123" var[2]="456" var[3]="789"
  • 引用数组 echo ${var[1]}
  • 变量 $:出现的数字就是你的PID号码
  • 变量 ?:上一个错误指令的错误代码,如果没有错误就为0
 
变量交互:read -p "请输入你的名字:" -t 30 name (-p表示提示世界,-t 表示30秒的输入时间)
 
变量内容的扩展:PATH="$PATH":/home/bin
 
变量内容的删除:echo ${path#/*:} 这句话的意思是从/开始到:之间删除掉最短的字符

变量内容的替换:

执行

1、直接绝对路径和相对路径执行,执行者必须要有脚本的执行权限。
2、全局变量的话 可以通过 bash shell.sh 或 sh shell.sh来执行
 
source、 sh script 的执行方式差异?
    sh script 或者 bash script 都会使用一个新的bash环境来执行脚本中的命令,当子程序完成后,子程序完成后,在子程序内的各个变量或者动作将会结束而不会传回父程序中
    source script 会在父程序中执行,因此各项动作都会在原本的bash 内生效
 
流程控制(顺序):shell scripts 依照 从上到下、从左到右 的顺序执行。
 
流程控制(条件)

  • test -e file 文件名是否存在
  • test -f file 文件名是否存在 且为file
  • test -d directory 文件名是否存在且为目录
  • test -r -w -x filename 是否具有可读可写可执行的权限
  • test n1 -eq n2 两数值相等
  • test n1 -ne n2 两数值不等
  • -gt  n1大于n2
  • -lt   n1小于n2
  • -ge  大于等于
  • -le   小于等于

脚本的变量交互还可以用 ${0}、${1}、${2}、${3} 来进行,${0} 表示执行的脚本名、${1} 表示输入的第一个变量、${2}表示输入的第二个变量、${3} 表示输入的第三个变量

if 条件判断

 case 条件判断

流程控制(循环):

while 循环

for 循环

for 循环

函数:

注意点:和传统语言不同,函数必须定义在脚本最前面,以便程序执行的时候可以认识函数。函数 形参 也是用${1}、${2}、${3} 来传参,也就是说函数内的${1}/${2}/${3} 辨认的调函数时传进去的实参。而不是 执行脚本传递时的参数

Linux 学习记录 四(Bash 和 Shell scirpt).的更多相关文章

  1. Linux 学习记录 四(Bash 和 Shell scirpt)

    一.什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工 ...

  2. leveldb 学习记录(四)Log文件

    前文记录 leveldb 学习记录(一) skiplistleveldb 学习记录(二) Sliceleveldb 学习记录(三) MemTable 与 Immutable Memtablelevel ...

  3. Linux 学习第四天

    Linux学习第四天 一.常用命令 1.tar  (压缩.解压) A.添加压缩包  tar czvf 压缩包名称.tar.gz 源文件 B.添加压缩包  tar cjvf 压缩包名称.tar.bz2 ...

  4. Linux学习笔记(四) vi编辑器

    一.vi 编辑器 vi 编辑器 (Visual Interface) 是所有 Unix 及 Linux 系统下标准的编辑器,相当于 Windows 系统中的记事本 它有三种模式,分别是: Comman ...

  5. JavaScript学习记录四

    title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  6. 4.VUE前端框架学习记录四:Vue组件化编码2

    VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  7. 鸟哥的linux私房菜学习记录之bash

    当你对计算机输入一个指令时,bash会将指令传送给核心kernel,核心再去调用相关的程序,启动硬件. 如果直接让用户操作操作系统,可能会造成系统的崩溃,所以操作系统通过应用程序来让用户操作系统即壳程 ...

  8. leveldb 学习记录(四) skiplist补与变长数字

    在leveldb 学习记录(一) skiplist 已经将skiplist的插入 查找等操作流程用图示说明 这里在介绍 下skiplist的代码 里面有几个模块 template<typenam ...

  9. Linux学习笔记(15)shell基础之Bash基本功能

    1 shell概述 shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序.用户可以用shell启动.挂起.停止甚至是编写一些程序. shell是一个功能强大 ...

随机推荐

  1. mysql数据库到底是什么?!

    MySql是MySql.AB公司开发的,采用客户/服务器模型的开放源码关系型SQL数据库管理系统,它可以在多种操作系统上运行. 客户端/服务器:C/S.需要给不同系统安装不同的软件,是专用的协议,比较 ...

  2. 【repost】H5的新特性及部分API详解

    h5新特性总览 移除的元素 纯表现的元素: basefont.big.center.font等 对可用性产生负面影响的元素: frame.frameset.noframes 新增的API 语义: 能够 ...

  3. UEditor的jQuery插件化 -转

    UEditor本身并不依赖jQuery,但如果在项目中同时使用两者的话,可能会希望使用jQuery语法创建和获取编辑器实例.为此,需要为jQuery编写插件,代码如下: (function ($) { ...

  4. JDBC几种常见的数据库连接

    JDBC的URL=协议名+子协议名+数据源名.a 协议名总是“jdbc”.b 子协议名由JDBC驱动程序的编写者决定.c 数据源名也可能包含用户与口令等信息:这些信息也可单独提供.几种常见的数据库连接 ...

  5. WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗

    在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...

  6. 札记:翻译-使用Scene和Transition实现【场景切换】动画效果

    简述:transitions framework 下面翻译transition为"过渡",强调动画过程的含义,不过更多时候使用transition单词本身. Android 4.4 ...

  7. maya2018卸载/安装失败/如何彻底卸载清除干净maya2018注册表和文件的方法

    maya2018提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2018失败提示maya2018安装未完成,某些产品无法安装,也有时候想重新安装maya ...

  8. 谷歌浏览器怎么FQ(一)(想使用谷歌浏览器应用商城的小伙伴这边看)

    谷歌浏览器的应用商城里本身有很多不错的扩展程序和插件,比如Wappalyzer(能够识别某个网站用的什么框架和库)广告终结者(能屏蔽大部分浮动,弹窗,甚至视频广告)等 但是谷歌因为某些原因需要FQ以后 ...

  9. Spring Boot发布将jar包转为war包。

    Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...

  10. Liferay的一些应用领域

    Liferay的用途是快速的部署内外站点,统一权限管理,开发Web热插拔插件,并不是所有系统都适合 不适合Liferay的一些应用领域: 1.独立认证.简单的系统,比如一些简单的增删改查:2.复杂业务 ...