一、什么是 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. 题解 luogu P1144 【最短路计数】

    本蒟蒻也来发一次题解第一篇请见谅 这个题有几个要点 1.无向无权图,建图的时候别忘记建来回的有向边[因此WA掉1次 2.无权嘛,那么边长建成1就好了2333333 3.最短路采用迪杰斯特拉(别忘用堆优 ...

  2. 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language

    老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...

  3. H5+.Net Webapi集成微信分享前后端代码 微信JS-SDK wx.onMenuShareTimeline wx.onMenuShareAppMessage

    说明: 1/因为赚麻烦这里没有使用数据库或服务器缓存来存储access_token和jsapi_ticket,为了方便这里使用了本地的xml进行持久化这两个值以及这两个值的创建时间和有限期限. 2/每 ...

  4. springboot之定时任务

    定时线程 说到定时任务,通常会想到JDK自带的定时线程来执行,定时任务. 回顾一下定时线程池. public static ScheduledExecutorService newScheduledT ...

  5. ZKWeb网页框架1.8正式发布

    1.8.0更新的内容有 破坏性更新 更新ZKWeb.System.Drawing到3.0.0 请修改源代码中的System.Drawing到System.DrawingCore 现在已经不再需要使用D ...

  6. Associative Containers

    Notes from C++ Primer Associative containers differ in fundamental respect from the sequential conta ...

  7. eclipse——JDK安装与环境变量配置步骤

    第一次接触eclipse的时候,让我自己安装jdk和配置环境变量,我是懵逼的,后来百度到找到了一个比较详细的引导,本人测试没问题,截图按步骤如下: JDK安装   步骤1: 步骤2: 配置环境变量 步 ...

  8. Spring Caching集成Ehcache

    Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.在应用中用于常常需要读取的数据交换,而不是通过DB DAO数据交换(cache不占用DB宝贵的NIO,直接交换堆内存). 整合S ...

  9. Liferay7 BPM门户开发之17: Portlet 生命周期

    Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...

  10. Xamarin.Android 本地数据库 SQLiteDatabase 操作

    目的:使用 SQLiteDatabase 创建本地数据库.表,并对数据进行增删改查操作. 引用命名空间: using Android.App; using Android.Widget; using ...