专栏首页JMCuiLinux 学习记录 四(Bash 和 Shell scirpt).

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

一、什么是 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} 辨认的调函数时传进去的实参。而不是 执行脚本传递时的参数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 反射机制

        Java 反射(Reflection)就是 Java 程序在运行时可以加载一个才知道类名的类,获得类的完整构造方法,并实例化出对象,给对象属性设定值或者...

    JMCui
  • 浅析Java RTTI 和 反射的概念

    一、概念: RTTI(Run-Time Type Identification,运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象...

    JMCui
  • 多线程编程学习二(对象及变量的并发访问).

    一、概念 非线程安全:会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是"脏读",也就是取到的数据其实是被更改过的. 线程安全:获得的实例变...

    JMCui
  • 咳血的独角兽丨互联网的幕后攻防

    我想谈谈一些真实发生的案例,来给大家展示一下风险控制这个职业,能为公司产生什么样的价值或者损失。

    周俊辉
  • 使用kotlin改善java代码

    本文只是举了kotlin可以改善java代码的几个例子,kotlin太强大了,目标是要替代java。其中很多设计可以看到scala的影子,但是黑魔法也比较多,学...

    codecraft
  • 跑路、欺诈风波不断,大数据风控威力何在?

    数据猿导读 在目前的互联网金融市场上,有60%的损失来自于欺诈,这60%里面又有80%—90%属于集团欺诈。因此,风险控制就成为互联网金融发展的必要基础。而在实...

    数据猿
  • 算法设计策略----分治法

    SuperHeroes
  • 互联网金融风控7个问题

    风控,大家心目中的风控是什么?我们先来点传统的解释 首先了解两个概念:风险管理和风险控制。 风险管理:是指如何在项目或者企业在一定的风险的环境里,把风险减至最低...

    陆勤_数据人网
  • 互联网小贷:一个从繁盛到衰退,又在管制中蜕变成长的类金融机构

    养码场的线上课程,以技术人员为核心的学习、交流、分享社群,全方位服务技术人和技术创业者。这里聚集了众多BAT/美团/京东/滴滴/360/小米/网易等知名互联网公...

    养码场
  • 网关卸载模式

    将共享或专用服务功能卸载到网关代理。 此模式可以通过将共享服务功能(如 SSL 证书的使用)从应用程序的其他部分移动到网关,简化应用程序开发。

    只喝牛奶的杀手

扫码关注云+社区

领取腾讯云代金券