一. 自定义变量
命名规则 字母数字下划线,不能以数字开头
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前shell中有效
二. 环境变量
shell在开始执行时已经定义好的
env 查看所有环境变量
set 查看所有变量
环境变量拥有可继承性:export之后就拥有继承性
export 导出变量(作用范围)
临时生效
永久生效
写入4个登陆脚本中 ~/.bashrc ~/.profile
更好放在/etc/profile.d/* 下建立独立的环境变量配置文件
PATH
$USER $PWD $HOME $SHELL $HOSTNAME
用户名 当前位置 家目录 登录shell 主机名
三. 位置变量
执行脚本时,给脚本传递的参数
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
四. 预定义变量
$0 脚本名
$* 所有的位置参数
$@ 所有的位置参数
$# 位置参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功
五. 赋值
显示赋值[直接赋值]
name=goudan
mem_free=`free -m | awk 'NR==2{print $7}'`
从用户输入赋值
read -p "提示信息" 变量名
六.运算
6.1整数运算
expr $num1+$num2
$[num1+num2] $[$num2+$num2]
$(($num2+$num2))
6.2小数运算
echo "scale=2;1/2" | bc
echo "print 1.0/2" | python
举例:
1、显式赋值
变量名=变量值
示例:
ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F` //`` 反引号,先执行引号内的内容再赋值
today2=$(date +%F) //$()先执行括号内的内容再赋值
2、read 从键盘读入变量值
read 变量名
read -t 5 -p "提示信息: " -n 2 变量名 -t 5 等待5秒, -p 提示信息 -n 2 输入的字符数量
例如
read name
read -p "请输入你的性别: " sex
read -p "请输入你的年龄: " -t 3 -n 2 age
3、定义或引用变量时注意事项
" " 弱引用 会对引用的变量进行替换
' ' 强引用 所见即所得
# cat a1.sh
#!/usr/bin/env bash
age=22
echo -e "年龄为 $age \ta"
echo -e '年龄为 $age \ta'
# ./a1.sh
年龄为 22 a
年龄为 $age a
4、反引号`` 命令替换 等价于 $() , 反引号中的shell命令会被先执行
# cat a1.sh
#!/usr/bin/env bash
MEM_FREE=`free -m |awk 'NR==2{print $7}'`
MEM_FREE2=$(free -m |awk 'NR==2{print $7}')
echo "内存剩余量为: $MEM_FREE, $MEM_FREE2"
# ./a1.sh
内存剩余量为: 7913, 7914
5、运算
加 +、减 1、乘 *、除[取整]/、取余[取模]%、幂运算**、
整数运算
方法一:expr
expr 1 + 2
expr $num1 + $num2 + - \* / %
方法二:$(())
echo $(($num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
方法三:$[]
echo $[5+2] + - * / %
echo $[5**2]
方法四:let
let sum=2+3; echo $sum
let i++; echo $i
小数运算
echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;6/4" |bc
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" |python
-------------------------------------------
5.1、整数运算
# cat a1.sh
#!/usr/bin/env bash
a=5
b=2
sum=$[$a+$b]
echo "a加b等于 $sum"
jian=$[$a-$b]
echo "a减b等于 $jian"
cheng=$[$a*$b]
echo "a乘b等于 $cheng"
chu=$[$a/$b]
echo "a除b等于 $chu"
mo=$[$a%$b]
echo "a模b等于 $mo"
# ./a1.sh
a加b等于 7
a减b等于 3
a乘b等于 10
a除b等于 2
a模b等于 1
5.2、小数运算
# cat a1.sh
#!/usr/bin/env bash
echo "print 5.0/2" | python
# ./a1.sh
2.5
6、转义:\
为了显示元字符,需要引用。当一个字符被引用时,其特殊含义被禁止
把有意义的变的没意义,把没意义的变的有意义
\n \t \\n
# cat a1.sh
#!/usr/bin/env bash
echo -e 'a\nb'
echo -e 'c\\nb'
# ./a1.sh
a
b
c\nb
7、变量长度 [在shell中纯粹数个数]
# cat a1.sh
#!/usr/bin/env bash
a=$1
echo "变量a的值为 $a,变量a的长度为${#a}"
# ./a1.sh zhangsan
变量a的值为 zhangsan,变量a的长度为8
# ./a1.sh 张三
变量a的值为 张三,变量a的长度为2
# ./a1.sh 张三1afaf
变量a的值为 张三1afaf,变量a的长度为7
8、让用户输入两个数字,然后分别输出两个数字的加减乘除的结果
# cat a1.sh
#!/usr/bin/env bash
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2
echo "加: $[$num1+$num2]"
echo "减: $[$num1-$num2]"
echo "乘: $[num1*num2]"
echo "除: $[num1/num2]"
# ./a1.sh
请输入第一个数字: 1
请输入第二个数字: 4
加: 5
减: -3
乘: 4
除: 0