Linux操作系统使用及C高级编程-D6-D8Linux shell脚本

利用shell命令写的脚本文件,后缀是.sh

shell脚本是一个解释型语言,不需要编译,可直接执行

书写:vi test.sh

#!/bin/bash:说明使用的是/bin目录下的bash

说明完后即可编写脚本文件

bash test.sh:运行文件

source test.sh:运行文件

./test.sh:运行文件

注意下图报错,因为没有执行权限,可使用chmod修改权限直接777最高权限

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第1张图片

脚本变量

存放系统和用户需要使用的特定参数(值)

变量名:使用固定名称,由系统预设用户定义

变量值:能够根据用户设置、系统环境的变化而变化

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第2张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第3张图片

自定义变量

在终端定义一个变量COUNT,并进行取出使用$

        Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第4张图片

也可在代码中使用,特别注意=两端无空格,注释是#

  Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第5张图片

若不想用此变量了,可看到在右图中最后打印出空格

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第6张图片

取值

双引号:允许通过$符号引用其他变量值

        弱引用,其中的变量应用会被替换为变量值

单引用:进制引用其他变量值,$是为普通字符

        强引用,其中的变量引用不会被替换为变量值,而保持源字符串

反撇号:命令替换,提取命令执行后的输出结果,"和$(...)作用相同"

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第7张图片

11反撇号:给其他变量赋值(反撇号是`),12相同功能

 ​​​​​​​​​​​​​​

数组

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第8张图片

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第9张图片Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第10张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第11张图片Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第12张图片

包含第二个元素,再往后一共打印3个元素

 只读变量

不可更改,不可删除

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第13张图片

 位置变量和预定义变量

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第14张图片

注意:$#统计参数个数,其中的./test2.sh未参与到统计中

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第15张图片

 环境变量

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第16张图片

Shell语句

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第17张图片

 ​​​​​​​打印提示

​​​​​​​​​​​​​​​​​​​​​​​​​​​​

 执行三秒,若未输入就退出:​​​​​​​​​​​​​​

 输入不显示

 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第18张图片

 这里就是需要特备注意空格在哪里​​​​​​​​​​​​​​​​​​​​​,一个是等号两端没有,一个是+两端都有

 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第19张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第20张图片 

在使用-n -z时,有时候结果正确,有时候错误,11最好加上""这样能特别明确的知道要取的是val1值,7行同样也是

 ​​​​​​​​​​​​​​​​​​​​​Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第21张图片

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第22张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第23张图片

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第24张图片

 分支语句、循环语句

分支语句

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第25张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第26张图片

 test命令也可使用[]代替,并且注意[]里两边都有空格

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第27张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第28张图片

 判断用户是否存在,如果存在,打印存在,如果不存在,打印不存在

        使用到grep语句查找grep "^linux:" /etc/passwd,此时只查找到第一个linux

        所以判断用户存不存在,就是统计是否打印了,结合管道wc -l判断打印了几行

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第29张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第30张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第31张图片

 而当要是想要输入y也是可以的话,也可以如6行这样:

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第32张图片

 或的操作是:-o,下面表示大于100,小于0

与:-a

非:!

也可以这样:

29行 *)表示剩余情况

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第33张图片

 循环语句

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第34张图片

 使用for循环挨个打印当前文件​​​​​​​Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第35张图片

打印输入参数

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第36张图片

$*和$@都表示所有的参数,区别是,$*加上双引号后是作为一个整体进行一次性打印,而$@还是想上面那样进行打印

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第37张图片

C语言方式使用for循环

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第38张图片

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第39张图片

使用while循环打印0~4

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第40张图片

 当然同样使用c语言方式也可以

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第41张图片

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第42张图片

 ​​​​​​​Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第43张图片

 Shell函数

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第44张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第45张图片

 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第46张图片

5行的$1是获取10行的linux输入

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第47张图片

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第48张图片 

加了local就是局部变量,否则函数体内部的都是全局变量

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第49张图片 

 而若是使用了命令置换的方式,全局变量val就无法使用了,这里需要注意

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本_第50张图片

 

你可能感兴趣的:(linux,运维,服务器)