一,执行方式
区别:bash和sh 是在一个虚拟环境下运行,是子shell
. 和source是在当前的shell环境下运行,是本shell
变量
自定义变量
ps:
name=123
llll="13132"
qqq="dd dad"
变量调用
$name
echo $name
注意
变量名不能以数字开头
等号左右两侧不能有空格
变量的值有空格的话必须用引号
重复定义变量
aa=123
aa=456#覆盖aa为456
aa="$aa"456
aa=${aa}789
变量查看
set
set
set | grep aa
删除
unset加变量名
unset aa
交互式定义变量(read)
ps
read -p "请输入内容" name
echo $name
注意
aa=123
aa="$aa"456
echo $aa
123456 #输出
aa='$aa'789
echo $aa
$aa789 #输出
aa=`ls /home`
echo $aa
1.txt #输出
数字运算
整数运算
expr
expr 1 + 2
3
expr $num1 + $num2
expr $num1 \* $num2 # *要用/*转义
#注意空格
$(())
echo $(($num1+$num2))
echo $((5-3*2))
$[]
$[5+2]
$[2**3]
#2的3次方
let
let sum=2+3 ; echo $sum
5
let i++ ; echo $i
小数运算
bc
echo "2*4" | bc
8
echo "2^4" | bc
16
echo "scale=2;6/4" | bc
1.50
环境变量
自定义变量:只在当前shell生效
环境变量:当前shell和子shell 有效
定义方法:
export back_dir1=/home/backup
export back_dir2
#back_dir2要是已经定义的变量(变量名)
位置变量
$0
代表当前脚本的名称
$1
到$9
:这些是位置参数,代表脚本接收到的参数。$1
是第一个参数,$2
是第二个参数,依此类推。
-
预定义变量
$*
和$@
:这两个变量都代表所有的参数列表,但是它们在使用上有一些区别。$*
会将所有的参数视为一个单一的字符串,而$@
会将每个参数视为独立的字符串。$0
代表当前脚本的名称- $# 参数的个数