Bash脚本编程(2)——编程入门

作者: 逃跑中计划 | 来源:发表于2016-03-28 22:00 被阅读872次

@(Bash)[编程入门]


1. Bash中的变量

1.1 变量类型

  • 字符型
  • 数值型
  • 整型
  • 浮点型

语言类型:

  • 强类型:
    定义变量时必须指定类型、参与运算必须符合类型要求;
    调用未声明变量会产生错误;
  • 弱类型:
    无须指定类型,默认均为字符型;
    参与运算会自动进行隐式类型转换;
    变量无须事先定义可直接调用;

1.2 变量的种类

(1)本地变量
生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;
(2)环境变量
生效范围为当前shell进程及其子进程;
(3)局部变量
生效范围为当前shell进程中某代码片断(通常指函数);
(4)位置变量
$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;
(5)特殊变量
$?, $0, $*, $@, $#

1.3 本地变量

变量赋值:name='value'
(1) 可以是直接字串:name="username"
(2) 变量引用:name="$username"
(3) 命令引用:name=COMMAND, name=$(COMMAND)

变量引用:
${name}, $name

引用分类:
""弱引用,其中的变量引用会被替换为变量值;
''强引用,其中的变量引用不会被替换为变量值,而保持原字符串;

显示已定义的所有变量:
set

销毁变量:
unset name

1.4 环境变量

变量声明、赋值:
export name=VALUE
declare -x name=VALUE

只读变量:
readonly name
declare -r name

变量引用:
$name, ${name}

显示所有环境变量:
export
env
printenv

销毁:
unset name

变量命名法则:
(1) 不能使程序中的保留字:例如if, for
(2) 只能使用数字、字母及下划线,且不能以数字开头
(3) 见名知义

1.5 位置变量

在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ...:对应调用第1、第2等参数
$0: 命令本身

shift [n]
用来偏移未知变量的一个命令

1.6 特殊变量

  • $?
    判断上一个命令或脚本的执行成功与否
  • $*
    传递给脚本的所有参数;
  • $@
    传递给脚本的所有参数;
  • $#
    传递给脚本的参数的个数;

2. Bash的配置文件

2.1 按生效范围划分

全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc

2.2 按功能划分

profile类:为交互式登录的shell提供配置

  • 全局:
    /etc/profile
    /etc/profile.d/*.sh
  • 个人:
    ~/.bash_profile
  • 功用:
    (1) 用于定义环境变量
    (2) 运行命令或脚本

bashrc类:为非交互式登录的shell提供配置

  • 全局:
    /etc/bashrc
  • 个人:
    ~/.bashrc
  • 功用:
    (1) 定义命令别名
    (2) 定义本地变量

2.3 生效次序

交互式登录(shell登录)

  • 直接通过终端输入账号密码登录;
  • 使用su - UserNamesu -l UserName切换的用户
  • 生效次序
    /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录(shell登录)

  • su UserName
  • 图形界面下打开的终端
  • 执行脚本
  • 生效次序
    ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

3. Bash中的运算

3.1 基本算数运算

算术符号:

  • +
  • -
  • *
  • /
  • %
  • **

实现算术运算:
(1) let var=算术表达式
(2) var=$[算术表达式]
(3) var=$((算术表达式))
(4) var=$(expr arg1 arg2 arg3 ...)

乘法符号有些场景中需要转义
Bash有内建的随机数生成器:$RANDOM

3.2 增强型赋值

算术符号:

  • +=
  • -=
  • *=
  • /=
  • %=

实现算术运算:
let varOPERvalue
例如:let count+=1

3.3 自增、自减

自增:
let var+=1
let var++

自减:
let var-=1
let var--

4. 条件测试

4.1 测试命令

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Note: EXPRESSION前后必须有空白字符

4.2 数值测试

  • -gt
    是否大于
  • -ge
    是否大于等于
  • -eq
    是否等于
  • -ne
    是否不等于
  • -lt
    是否小于
  • -le
    是否小于等于

4.3 字符串测试

  • ==
    是否等于
  • >

    是否大于

  • <
    是否小于
  • !=
    是否不等于
  • =~
    左侧字符串是否能够被右侧的PATTERN所匹配
    此表达式一般用于[[ ]]中
  • -z "STRING"
    测试字符串是否为空,空则为真,不空则为假
  • -n "STRING"
    测试字符串是否不空,不空则为真,空则为假

Note:用于字符串比较时的用到的操作数都应该使用引号

4.4 文件测试

4.4.1 存在性测试

  • -a FILE
    文件存在性测试,存在为假,否则为真
  • -e FILE
    文件存在性测试,存在为真,否则为假

4.4.2 存在性及类别测试

  • -b FILE
    是否存在且为块设备文件
  • -c FILE
    是否存在且为字符设备文件
  • -d FILE
    是否存在且为目录文件
  • -f FILE
    是否存在且为普通文件
  • -h FILE-L FILE
    存在且为符号链接文件
  • -p FILE
    是否存在且为命名管道文件
  • -S FILE
    是否存在且为套接字文件

4.4.3 文件权限测试

  • -r FILE
    是否存在且可读
  • -w FILE
    是否存在且可写
  • -x FILE
    是否存在且可执行

4.4.4 文件特殊权限测试

  • -g FILE
    是否存在且拥有sgid权限
  • -u FILE
    是否存在且拥有suid权限
  • -k FILE
    是否存在且拥有sticky权限

4.4.5 文件大小测试

  • -s FILE
    是否存且非空

4.4.6 文件是否打开

  • -t fd
    fd表示文件描述符是否已经打开且与某终端相关
  • -N FILE
    文件自动上一次被读取之后是否被修改过
  • -O FILE
    当前有效用户是否为文件属主
  • -G FILE
    当前有效用户是否为文件属组

4.4.7 双目测试

  • FILE1 -ef FILE2
    FILE1与FILE2是否指向同一个设备上的相同inode
  • FILE1 -nt FILE2
    FILE1是否新于FILE2
  • FILE1 -ot FILE2
    FILE1是否旧于FILE2

4.5 组合测试条件

第一种方式:
COMMAND1 && COMMAND2
COMMAND1 || COMMAND2
! COMMAND

举例:
1、[ -e FILE ] && [ -r FILE ]

第二种方式:
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2
! EXPRESSION

举例:
1、[ -z "$hostName" -o "$hostName"=="localhost.localdomain" ] && hostname www.magedu.com
2、[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

必须使用测试命令进行


5. 思维导图

编程入门

相关文章

  • Bash脚本编程(2)——编程入门

    @(Bash)[编程入门] 1. Bash中的变量 1.1 变量类型 字符型 数值型 整型 浮点型 语言类型: 强...

  • note_11.3_shell脚本list生成

    bash脚本编程 过程式编程语言的执行流程:顺序执行选择执行循环执行 选择执行: (1) &&, ||(2) if...

  • Linux bash脚本编程入门

    脚本文件的基本格式: 第一行顶格,#!/bin/bash 注释信息,# 开头 缩进,适度添加空白行 变量:...

  • bash脚本编程

    编程语言: 编译器,解释器编程语言:机器语言,汇编语言、高级语言静态语言:编译型语言强类型(变量)关键字:事先转换...

  • bash脚本编程

    [TOC] 变量: 存储单个元素的内存空间 数组: 存储多个元素的连续的内存空间 数组 bash的字符串处理工具:...

  • bash脚本编程

    bash脚本之编程交互 脚本参数 用户交互,通过键盘输入数据,从而完成变量的赋值操作 bash -n 脚本 检查...

  • note_9.1.1_shell脚本逻辑判断

    bash脚本编程 脚本文件格式:   第一行,顶格:#!/bin/bash  注释信息:#  代码注释:  缩进,...

  • note_9.2_bash脚本交互

    bash脚本编程之用户交互: 脚本参数   位置参数变量  xxxx.sh argu1 argu2    引用方...

  • linux/shell 分析nginx日志

    一、学习资料 高级Bash脚本编程指南 LINUX与UNIX SHELL编程指南 鸟哥的Linux私房菜 IBM ...

  • note_7.3_bash脚本编程算术运算

    bash脚本编程之算术运算 +,-,*,/, **, %算术运算格式: let VAR=EXPRESSION VA...

网友评论

    本文标题:Bash脚本编程(2)——编程入门

    本文链接:https://www.haomeiwen.com/subject/tcmdlttx.html