Shell语言-11-Shell变量以及变量运算

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 ~]# 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan0517

感谢您的鼓励与支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值