shell基础-01 变量(自定义变量、环境变量、预制变量、变量运算、变量置换、变量默认值)

1. 自定义变量和环境变量

  • 书写习惯
    自定义变量小写;环境变量大写。

  • 区别
    自定义变量:仅在该层shell中生效
    环境变量:在该层shell及子shell中都生效

1.1 定义变

  • 自定义变量
# 变量名=值
  • 环境变量
# export 变量名=变量值
# export 自定义变量

1.2 查看变量

# env

1.3 取消定义

# unset 变量名

1.4 示例

定义一个变量aaa,写一个脚本打印变量aaa。
终端可以打印,但是脚本不能打印。
将变量定义为环境变量,脚本可以打印了。

[root@liubei tmp]# cat test.sh
#!/bin/bash
echo $aaa
[root@liubei tmp]# unset aaa
[root@liubei tmp]# echo $aaa

[root@liubei tmp]# cat test.sh
#!/bin/bash
echo $aaa
[root@liubei tmp]# aaa=123
[root@liubei tmp]# echo $aaa
123
[root@liubei tmp]# bash test.sh

[root@liubei tmp]# export aaa
[root@liubei tmp]# bash test.sh
123

2. 预制变量

2.1 脚本参数相关

  • $0 Shell本身的文件名
  • $1 $2 ${10} : 参数1 参数2 参数10
  • $* 所有参数列表。以"$1 $2 … $n" 子串的形式输出所有参数。
  • $@ 所有参数列表。以"$1" "$2" … "$n" 数组的形式输出所有参数。
  • $# 添加到shell的参数个数

2.2 命令返回值相关

  • $$ Shell本身的pid
  • $! 上条shell的pid
  • $? 上条命令结束代码

3. 变量定义方式

3.1 引号的用法

" " 双引号,表相对引用,也可以用 ${ }
' ' 单引号,表绝对引用
`` 反引号,表执行引用,也可以用 $()

3.2 交互式输入变量

# read -p "提示信息: " 变量名

参数:

  • -t 5 等待时间
  • -n 2 允许接受字符数

4. 变量运算

4.1 整数

其实你会一种方法就行了

4.1.1 let (推荐)

  • 语法
    let 变量=计算公式
  • 示例
# let sum=$aaa+$bbb;echo $sum

4.1.2 expr

  • 语法
    expr 计算公式
  • 示例
[root@liubei ~]# aaa=2
[root@liubei ~]# bbb=3
[root@liubei ~]# expr $aaa + $bbb
5

支持 + - * / % ,输出不用echo

4.1.3 $(())

  • 语法
    $((运算公式))

  • 示例

[root@liubei ~]# echo $((aaa+bbb))
5

支持 + - * / % **,输出需要echo

4.1.4 $[ ]

  • 语法
    $[ 计算公式 ]
  • 示例
[root@nightingale ~]# echo $[$aaa+$bbb]

4.2 小数计算

利用bc计算器,这里大概了解一下即可,之后我会在《bc计算器》一节中说明

# echo "scale=保留小数位;11/3"|bc

5. 变量置换

5.1 内容删除

  • 语法

${原字串 符号 要删部分}

符号:

  • # 从左最短删除
  • ## 从左最大删除
  • % 从右最短删除
  • %% 从右最大删除

说明:要删部分支持正则

  • 示例
# url=www.baidu.com
# echo ${url#*.}
baidu.com
# echo ${url##*.}
com
# echo ${url%.*}
www.baidu
# echo ${url%%.*}
www

5.2 内容替换

  • 语法
    ${原字串/旧内容/新内容}

符号:

  • / 替换一个
  • // 替换所有
  • 示例
[root@liubei ~]# url=www.baidu.baidu.com
[root@liubei ~]# echo ${url/baidu/liubei}
www.liubei.baidu.com
[root@liubei ~]# echo ${url//baidu/liubei}
www.liubei.liubei.com

6. 变量默认值

命令变量未定义变量值为空变量非空值
# echo ${变量-默认值}默认值变量值(为空)变量值
# echo ${变量:-默认值}默认值默认值变量值

上表说明:
如第二行第二列,表示使用echo ${变量-值A}命令打印,如果 变量未定义,则打印 值A。

  • 示例

echo ${变量-值A}打印,如果变量有值则打印变量值,如果没定义变量则打印默认值。

[root@liubei ~]# aaa=111
[root@liubei ~]# echo ${aaa-222}
111
[root@liubei ~]# unset aaa
[root@liubei ~]# echo ${aaa-222}
222

7. ++i 和 i++

7.1 i++

x=i++ 表示,先 x=i 再给 i=i+1

# i=1
# let x=i++ //表示先把i的值给x,再给i递增。
# echo $i
2

# echo $x
1

7.2 ++i

x=++i 表示,先 i=i+1 ,再赋值给 x

# i=1
# let x=++i   //表示先给i递增,在把值给x
# echo $i
2

# echo $x
2

posted on 2021-09-18 14:48  运维开发玄德公  阅读(14)  评论(0编辑  收藏  举报  来源

导航