文章目录
1. 系统变量
1.1 常用系统变量
$HOME、$PWD、$SHELL、$USER等
1.2 查看系统变量的值
[root@Centos-root473791 ~]# echo $HOME
/root
1.3 显示当前shell所有变量
[root@Centos-root473791 ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
.......
2. 自定义变量
2.1 基本语法
(1)自定义变量: 变量名=变量值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
查看变量 echo $变量名
取消变量 unset 变量名
作用范围 仅在当前窗口shell中有效
2.2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
2.3 实操
(1)定义变量A
[root@Centos-root473791 ~]# A=5
[root@Centos-root473791 ~]# echo $A
5
(2)给变量A重新赋值
[root@Centos-root473791 ~]# A=5
[root@Centos-root473791 ~]# echo $A
5
[root@Centos-root473791 ~]# A=8
[root@Centos-root473791 ~]# echo $A
8
(3)声明静态的变量B=2,不能unset
[root@Centos-root473791 ~]# readonly B=2
[root@Centos-root473791 ~]# echo $B
2
[root@Centos-root473791 ~]# B=9
-bash: B: readonly variable
(4)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
[root@Centos-root473791 ~]# C=1+2
[root@Centos-root473791 ~]# echo $C
1+2
(5)变量的值如果有空格,需要使用双引号或单引号括起来
[root@Centos-root473791 ~]# D= i love you
-bash: i: command not found
[root@Centos-root473791 ~]# D="i love you"
[root@Centos-root473791 ~]# echo $D
i love you
(6)可把变量提升为全局环境变量,可供其他Shell程序使用
[root@Centos-root473791 ~]# export E=5
[root@Centos-root473791 ~]# echo $E
5
(7) 使用系统自带别名的作为变量,得使用反斜杠
[root@Centos-root473791 ~]# echo `pwd`
/root
取消自定义变量 unset 变量名
如果新开一个窗口或者取消自定义变量,则失效
[root@Centos-root473791 ~]# AAAA=100
[root@Centos-root473791 ~]# echo $AAAA
100
[root@Centos-root473791 ~]# unset AAAA
[root@Centos-root473791 ~]# echo $AAAA
[root@Centos-root473791 ~]#
3 特殊变量
包括 环境变量 位置变量 预定义变量
3.1 环境变量
环境变量其实就是 /etc/profile ~/.bashrc 等,比如我们看到得别名,bash初始化得时候就会生成这些环境变量
[root@Centos-root473791 ~]# alias
alias bd='curl www.baidu.com'
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@Centos-root473791 ~]# cat ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias bd='curl www.baidu.com'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[root@Centos-root473791 ~]#
3.2 位置变量
随便创建一个脚本 给它赋值位置变量
当给3个参数赋值时,会给1 2 3 赋值,但是不足3个,就从上到下赋值,根据顺序赋值而不是数字
[root@Centos-root473791 ~]# cat abc.sh
#! /bin/sh
echo $1
echo $2
echo $3
[root@Centos-root473791 ~]# sh abc.sh 1 2 3
1
2
3
[root@Centos-root473791 ~]# sh abc.sh 1 3
1
3
[root@Centos-root473791 ~]# sh abc.sh 3
3
[root@Centos-root473791 ~]#
3.3 预定义变量
-
$# 表示参数个数。
-
$0 是脚本本身的名字。
-
$1 是传递给该shell脚本的第一个参数。
-
$2 是传递给该shell脚本的第二个参数。
-
$@ 表示所有参数,并且所有参数都是独立的。
-
$$ 是脚本运行的当前进程ID号。 $! 上一个后台进程的PID
-
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误。
-
$* 将所有参数作为一个整体
以上是常用,补充以下
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$# (功能描述:获取所有输入参数个数,常用于循环)
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
(1)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。
(2)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
4. shell变量运算
整数运算
4.1 方法一: expr + - * % 注意空格必须要有
[root@Centos-root473791 ~]# expr 1+1 #不加空格是整体
1+1
[root@Centos-root473791 ~]# expr 1+ 1 #单边不加空格直接报错
expr: syntax error
[root@Centos-root473791 ~]# expr 1 + 1 # 对的
2
[root@Centos-root473791 ~]# a=1
[root@Centos-root473791 ~]# b=2
[root@Centos-root473791 ~]# expr $a + $b #加法
3
[root@Centos-root473791 ~]# expr $a / $b #因为是整数运算,1除以2是除不尽,为0
0
[root@Centos-root473791 ~]# expr $b / $a #除尽就是正常值
2
[root@Centos-root473791 ~]# expr $b \* $a #乘法
2
[root@Centos-root473791 ~]# expr $b % $a # 除法
0
[root@Centos-root473791 ~]#
4.2 方法二: $(())
其实就是把expr换成双括号的形式,另外一般搭配echo使用,
直接使用命令是打印不出来的
[root@Centos-root473791 ~]# c=3
[root@Centos-root473791 ~]# d=4
[root@Centos-root473791 ~]# echo $(($c + $d))
7
[root@Centos-root473791 ~]# $(($c + $d)) #直接使用命令是打印不出来的
-bash: 7: command not found
[root@Centos-root473791 ~]#
4.3 方法三: $ [ ] 雷同方法二
[root@Centos-root473791 ~]# c=5
[root@Centos-root473791 ~]# d=6
[root@Centos-root473791 ~]# echo $[$c +$d]
11
[root@Centos-root473791 ~]# $[$c +$d] #直接使用命令是打印不出来的
-bash: 11: command not found
[root@Centos-root473791 ~]#
小数运算
[root@Centos-root473791 ~]# echo "2*4"|bc
8
[root@Centos-root473791 ~]# echo "2^4"|bc
16
[root@Centos-root473791 ~]# echo "scale=2;6/4"|bc #小数运算
1.50
[root@Centos-root473791 ~]#