一、什么是 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. 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇

    error: Failed dependencies: MySQLconflicts   错误提示: error: Failed dependencies:                       ...

  2. 关于SQL\SQL Server的三值逻辑

    在SQL刚入门的时候,我们筛选为某列值为NULL的行,一般会采用如下的方式: SELECT * FROM Table AS T WHERE T.Col=NULL 而实际上此种写法无法得到想要的结果.此 ...

  3. Linux和Windows下tomcat开机自启动设置

    Linux下tomcat的开机自启动设置 1.修改系统文件rc.local:vi /etc/rc.d/rc.local rc.local是给用户自定义启动时需要执行的文件,和windows里面的“启动 ...

  4. Javascript高级编程学习笔记(13)—— 引用类型(2)Array类型

    除了Object类型之外ECMA中最常用的引用类型可能就是Array类型了 并且ECMA中的数组类型和其他大多数编程语言的数组类型存在着很大的区别 今天就介绍一下JS中的Array的特别之处 区别 1 ...

  5. Java 实现将其他类型数据转换成 JSON 字符串工具类

    这是网上一个大神实现的,具体出处已找不到,在这做个记录,方便以后使用. package com.wb.test; import java.beans.IntrospectionException; i ...

  6. Spark基础脚本入门实践2:基础开发

    1.最基本的Map用法 val data = Array(1, 2, 3, 4, 5)val distData = sc.parallelize(data)val result = distData. ...

  7. [视频]K8飞刀 S2-020 exploit getshell 动画教程

    [视频]K8飞刀 S2-020 exploit getshell 动画教程 链接:https://pan.baidu.com/s/1G5x7Dcu6pzHz6ZfSCDDmKA 提取码:05kw

  8. 手把手教您定制化Centos6.x安装界面

    1.获取安装界面代码      挂载image/install.img:mount image/install.img /mnt/5 -o loop      复制挂载后的代码至self_intall ...

  9. 全网最详细的实用的搜索工具Listary和Everything对比的区别【堪称比Everything要好】(图文详解)

    不多说,直接上干货! 引言 无论是工作还是科研,我们都希望工作既快又好,然而大多数时候却迷失在繁杂的重复劳动中,久久无法摆脱繁杂的事情.   你是不是曾有这样一种想法:如果我有哆啦A梦的口袋,只要拿出 ...

  10. ACM学习大纲

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...