Bootstrap

shell脚本基础和变量

shell脚本基础和变量

1 shell脚本基础

1.1 shell脚本是什么

Shell(壳) 是一类程序的总称,用于将人类使用的高级语言转换成机器能看懂的二进制语言,为用户和内核之间的交互提供接口。

Shell脚本是一种用于编写和执行命令序列的扩建语言,或者是动态语言,只有在被调用时,才会执行。

  • 脚:把保存在文本中代码执行起来

  • 本:代码是保存在文本当中,特定条件(运行代码的条件)

Shell脚本可以通过文本文件的形式保存,并使用shell解释器来执行。

Shell脚本可以包含命令、条件判断、循环、函数等,可以使用变量、数组、字符串处理、文件操作等功能。

1.2 linux当中的shell分类

  • bash:主流,也是现在市面上绝大多数的linux系统默认的shell

  • sh:bash是sh的升级版

  • csh:类C语言的shell

  • tcsh:和csh类型,相当于升级版

  • nologin:也是一种shell,禁止用户登录

1.3 shell脚本的作用

  • 自动化运维

  • 批量化重复操作可以通过脚本和计划任务来自动运行

  • 减轻管理人员的工作量

  • 避免配置出错

1.4 shell脚本的结构

#!/bin/bash
#声明的脚本默认解释器,这个可以不加,默认就是bash

# this is my first shell-script
# 以"#"开头。表示当前的内容为注释内容,注释的内容是不会被运行的,写代码要养成写注释的习惯,
# 方便其他人阅读和理解

# 可执行语句:
# 所有的Linux可执行的命令都可以是代码的内容

cd /boot

echo "当前所在的目录:"
#在shell当中的作用相当于打印,echo要打印的内容都是字符串,推荐使用双引号。

pwd

echo "展示其中以vmL开头的文件:"

ls -lh vml*

1.5 shell脚本的执行方式

  • 调试模式

    脚本没有权限的情况下的运行模式。

    bash:创建一个子shell,只在这个子环境当中运行,不会真正的执行代码,运行结束,子环境也会退出。
    
    source:点命令,真正运行可执行的代码。
    
  • 赋权执行

    在工作中所有的脚本都是赋权执行的。

    chmod +x 脚本文件
    
    ./脚本文件
    
  • 定时任务

    • 使用绝对路径
    • 需要执行权限

1.6 重定向

重定向:就是把这些信息保存到指定的文件当中去

重定向分类:

  • 重定向输入:<

    从指定的文件获取内容

  • 重定向输出:

    > :只能把标准输出保存到文件当中去,如果原文有内容会直接覆盖

    >> :标准输出保存到文件当中去,不会覆盖原内容,而是在原内容之后追加

  • 重定向错误输出

    2> :将错误信息保存到指定的文件,文件当中的内容也会被覆盖。

    2>> :将错误信息保存到指定的文件,文件当中的内容不会被覆盖而是在行后追加

  • 混合输出:

    &>

    &>>

2 变量

变量:用来存放系统和用户需要使用的特定的参数

变量名:

  • 自定义变量:由用户自己定义,修改和使用。
  • 特殊变量:环境变量、只读变量、位置变量、预定义变量。

变量值:

  • int:整数,没有小数点
  • string:字符串,字母或者数字组成,会用引号引起来
  • 布尔:true和false,为真还是为假(一般用于条件判断的返回值)
  • 浮点:有小数点

2.1 自定义变量名

1、不要使用系统的命令作为变量名称

2、不要使用中文

3、变量名不能使用特殊符号来开头,可以使用下划线开头_

4、定义变量时,一定要是字母开头,不能以数字开头

5、变量名最好是名称对应的英文全称或者简写

read -p "提示信息" a
#read: 根据用户输入直接赋值给变量
#-p "":固定格式
#a:变量名
echo $a

强引用和弱引用(一般用于echo):

" ":弱引用,打印变量时,加上双引号就是变量的值

’ ':强引用,打印变量时,就是字符串的本身,不再代表变量对应的值

``:先运行指令,把指令运行的结果赋值给变量

2.2 变量的作用范围

2.2.1 全局变量

在全局配置文件 /etc/profile 当中修改,所有的用户都可以使用

export 变量名=

如果有需要一直不变的参数可以供所有人使用,就可以配置全局变量

副作用:一旦有改动,增加了复杂性

2.2.2 环境变量

环境变量(全局变量的一种)是系统创建的,设置用户的工作环境,由系统维护,一般是不去修改的,让所有人都可以自动识别($PATH,自动补齐)

2.2.3 位置变量

脚本外传参

$1,$2,${10},${11}

2.2.4 预定义变量

预定义变量(是全局变量的一种,脚本解释器提供的,或者是编程语言自带的,不能修改)

  • $*:表示命令或者脚本需要处理的参数

  • $@:也表示命令或者脚本需要处理的参数,区别在于处理的方式不同

    区别:" $* ",会把传入的参数当做一个整体来进行处理,不加双引号和$@是一样的,都是一个个处理;$@,加不加双引号,都会把参数一个个的处理

  • $#:记录传递给脚本参数的个数

  • $?:记录的上一次执行命令的返回码,用来判断上一次执行的命令是否成功

    0和非0,只有0表示上一次的命令执行成功,其他的都是失败

2.3 运算方法

2.3.1 整数运算
a=12
b=5
c=$(($a%$b))
echo $c
i=$(expr 12 \* 5)
let d=12+10
echo $i
echo $d

(())

expr 12 + 5
expr 12 \* 7

i++     都是表示自增1 i=i+1   先赋值再加 i=0 i=1+1 i+=2
++i     先加,再赋值  i=0 i=0+1

i--     表示i自减1 i=i-1 i-=2
--i
2.3.2 非整数运算
#bash 默认不支持小数运算。bc

num=$(echo "4.4+5.5" | bc)
echo $num

#awk

num1=$(awk 'BEGIN{print 4.45*1.2}')
echo $num1
;