[转帖]Linux 学习记录四(Bash 和 Shell scirpt).

linux,学习,记录,bash,shell,scirpt · 浏览次数 : 0

小编点评

**1、什么是 Shell?** Shell 是一个命令行界面 (CLI),它是一种终端软件,可以用于替代图形用户界面 (GUI) 的用户界面。它使用的是命令行格式的指令,而不是图形界面上的鼠标和键盘。 **2、Bash Shell 的基本操作技巧** * **查看前一次登录执行过的命令:** `vim ~/.bash_history` * **命令和文件补全功能(Tab键):** 输入命令并在第二个字后面输入 `Tab`,则会自动补全命令。 * **命令别名设定功能:** 使用 `alias` 命令创建别名,可以简化对特定的命令的输入。 * **程序化脚本(shell scripts):** 使用 `#`符号标记代码块,可以使 shell 忽略后面的字符直到遇到 `#`符号。 * **通配符**: 使用通配符可以简化对多个文件或目录的处理。 * **换行输入 \\ +[enter]**: 在提示符前或后添加 `\`,可以行内换行。 * **从光标向前或者向后删除字符串 [crtl]+u / [crtl] +k8**: 使用 `crtl` 等字符可以从光标向前或向后删除字符串。 * **使用 env 和 export 可观察环境变量;** 使用 `set` 命令可以观察目前 bash 环境下的所有变量。 * **连续命令中可以让两个命令连续执行:** 使用 `&` 符号连接命令。 **3、Shell Script** Shell script 是利用 shell 的功能所写的一个程序,该程序是使用纯文本文件。将一些 shell 的语法与指令写在里面,搭配正则表达式、管线命令与数据流重导向等功能,以达到我们的处理命令。

正文

https://www.cnblogs.com/jmcui/p/7194627.html

 

阅读目录

一、什么是 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

1、概念

    Shell script 是利用shell 的功能 所写的一个程序,这个程序是使用纯文本文件。将一些 shell 的语法与指令写在里面,搭配正则表达式、管线命令与数据流重导向等功能,以达到我们的处理命令。其实Shell script 就是window 中的批处理命令,它将shell 指令、再加上一点脚本的语法 写出来的程序。shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了,因为shell scripts的速度较慢,且使用的CPU资源较多,造成主机资源的分配不良。

2、变量:

 变量类型: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#/*:} 这句话的意思是从/开始到:之间删除掉最短的字符

变量内容的替换:

3、执行 

- 直接绝对路径和相对路径执行,执行者必须要有脚本的执行权限。
- 全局变量的话 可以通过 bash shell.sh 或 sh shell.sh来执行
 
source、 sh script 的执行方式差异?
    sh script 或者 bash script 都会使用一个新的bash环境来执行脚本中的命令,当子程序完成后,子程序完成后,在子程序内的各个变量或者动作将会结束而不会传回父程序中
    source script 会在父程序中执行,因此各项动作都会在原本的bash 内生效

4、流程控制(顺序)

shell scripts 依照 从上到下、从左到右 的顺序执行。

5、流程控制(条件)

  • 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} 表示输入的第三个变量 

5.1  if 条件判断

 5.2  case 条件判断

6、流程控制(循环)

6.1  while 循环

 6.2  for 循环

7、函数

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

与[转帖]Linux 学习记录四(Bash 和 Shell scirpt).相似的内容:

[转帖]Linux 学习记录四(Bash 和 Shell scirpt).

https://www.cnblogs.com/jmcui/p/7194627.html 阅读目录 一、什么是 Shell? 二、Bash Shell 的基本操作技巧 三、Shell Script 回到顶部 一、什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗

[转帖]《Linux性能优化实战》笔记(一)—— 平均负载

最近在看极客时间的《Linux性能优化实战》课程,记录下学习内容。 一、 平均负载(Load Average) 1. 概念 我们都知道uptime命令的最后三列分别是过去 1 分钟、5 分钟、15 分钟系统的平均负载,到底平均负载是什么? 简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中

[转帖]perf学习-linux自带性能分析工具

目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里。 方便自己查看。 什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。 几乎能够处理所有与性能相关的事件。

[转帖]perf学习-linux自带性能分析工具

目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里。 方便自己查看。 什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。 几乎能够处理所有与性能相关的事件。

[转帖]使用 find 命令在 Linux 上查找文件和目录

https://linux.cn/article-14071-1.html 学习 find 命令的原因有很多。 不管我决心如何组织文件,似乎总有无法找到文件的时候。有时是因为我不记得最初的文件名,其他时候,我知道名字,但我不记得在哪里保存它了。甚至有时我需要一个我最初就没有创建的文件。但是,无论遇到

[转帖]精华总结:10个问题理解 Linux epoll

epoll 是 linux 特有的一个 I/O 事件通知机制。很久以来对 epoll 如何能够高效处理数以百万记的文件描述符很有兴趣。近期学习、研究了 epoll 源码,在这个过程中关于 epoll 数据结构和作者的实现思路产生出不少疑惑,在此总结为了 10 个问题并逐个加以解答和分析。 本文基于的

[转帖]【Linux学习】awk内置函数详细介绍(实例)

https://www.cnblogs.com/gtea/p/12668736.html 这节详细介绍awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数 一、算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y, x )

[转帖]linux学习:sed与awk与tr用法整理

https://www.cnblogs.com/LO-gin/p/6882490.html 流编辑器:sed 语法:sed [-hnV][-e

[转帖]Linux学习14-ab报错apr_pollset_poll: The timeout specified has expired (70007)

https://www.cnblogs.com/yoyoketang/p/10255100.html 前言 使用ab压力测试时候出现报错apr_pollset_poll: The timeout specified has expired (70007),本篇总结了几个ab常见的报错和对应解决办法当

[转帖]Linux 学习笔记: shell中${} 的用法,删除&替换

Linux 学习笔记: shell中${} 的用法,删除&替换 字符串的删除 echo${i##*/} 删除 / 前的所有内容 ## 删除 tt=$i echo{tt:22} #取的22位以后的所有字符 file=/dir1/dir2/dir3/my.file.txt ${file#/}:删掉第一个