Shell学习(1)---脚本入门 一、概述 二、脚本入门 三、变量 四、运算符  五、条件判断  六、流程控制  七、 read读取控制台输入  八、函数

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

以下知识来自尚硅谷。

Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

二、脚本入门

1、脚本格式

脚本以#!/bin/bash开头(指定解析器)

2、第一个Shell脚本:

需求:创建一个Shell脚本helloworld.sh,输出helloworld

  编辑helloworld.sh脚本:

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数
#!/bin/bash

echo "helloworld"
View Code

  

执行helloworld.sh脚本:sh helloworld.sh 或者 bash helloworld.sh  

  如果直接 ./helloworld.sh来执行,若需要执行权限,则可先chmod 777 helloworld.sh,再执行。

三、变量

(1)系统变量

1、常用系统变量:

  • $HOME:家目录
  • $PWD:当前所在目录
  • $SHELL:当前所用的shell编译器
  • $USER:当前的用户

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 (2)自定义变量

1.基本语法

(1)定义变量:变量=值(等号两边不能有空格)

(2)撤销变量:unset 变量

(3)声明静态变量:readonly变量,注意:不能unset

 2、定义规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

(2)等号两侧不能有空格

       (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。

       (4)变量的值如果有空格,需要使用双引号或单引号括起来。如 D="banzhang love mm"

(5)可把变量提升成全局环境变量,可供其他shell程序使用。export 变量名

(3)特色变量:$n

1、$n    (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 (4)特色变量:$#

1、$#    (功能描述:获取所有输入参数个数,常用于循环)。

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

(5)特色变量:$*、$@

  • $*    (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
  •   $@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

  • 比较$*和$@区别

(a)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

(b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

(6)特色变量:$?

$?  (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 

(7)字符串前加x

linux 中 if [ "x${var}" = "x" ] 什么意思

如下面的linux命令
if [[ x"${aa}" == x"b" ]]
then
    A=$aa
else
 B=$aa
fi

其中的if 第一行是什么意思
表示字符串${aa}和字符串"b"相等,其中{}用以区分字符串,{}内部被当做一个整体处理,$是取内容运算符,表示其后所接变量的值.
加上x是为了,防止aa为空时的语法错误。
 
if [[ "x${aa}" == "x" ]]------>这是判断aa是否为空。

四、运算符

(1)“$((运算式))”或“$[运算式]”

(2)expr  + , - , *,  /,  %    加,减,乘,除,取余

注意:expr运算符间要有空格

实操:

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 五、条件判断

1.基本语法

[ condition ](注意condition前后要有空格)

注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。

 

 2、常用判断条件

(1)两个整数之间比较

= 字符串比较

-lt 小于(less than)                     -le 小于等于(less equal)

-eq 等于(equal)                         -gt 大于(greater than)

-ge 大于等于(greater equal)    -ne 不等于(Not equal)

(2)按照文件权限进行判断

-r 有读的权限(read)                 -w 有写的权限(write)

-x 有执行的权限(execute)

(3)按照文件类型进行判断

-f 文件存在并且是一个常规的文件(file)

-e 文件存在(existence)             -d 文件存在并是一个目录(directory)

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 六、流程控制

1、if判断

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

if [ 条件判断 ];then

******

elif [ 条件判断 ];then

******

fi

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 2、case语句

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

注意事项:

1)      case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

2)      双分号“;;”表示命令序列结束,相当于java中的break。

3)      最后的“*)”表示默认模式,相当于java中的default。

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

     上面的例子,如果输入变量为4,结果仍打印renyao。

3、for循环

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数 Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 4、while循环

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 七、 read读取控制台输入

 Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 八、函数

1、系统函数

  • basename:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
  • dirname:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数

 2、自定义函数

1.基本语法

[ function ] funname[()]

{

        Action;

        [return int;]

}

funname

2.经验技巧

        (1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

        (2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

 Shell学习(1)---脚本入门
一、概述
二、脚本入门
三、变量
四、运算符
 五、条件判断
 六、流程控制
 七、 read读取控制台输入
 八、函数