学习shell脚本变量用法:用户自定义变量,环境变量,命令行参数(位置变量),预定义变量
执行shell脚本可用。./脚本名;source 脚本名;sh 脚本名。后两种不必用加x权限。
shell脚本注释为#
变量赋值前后不能有空格
在windows下编辑shell脚本行尾有回车换行,运行脚本会报invalid \r
命令行传入参数以空格区分
1- shell脚本初识
shell脚本就是把shell命令写成一个可执行文件。
示例:
a- 新建一个shell.sh文件,用vim打开并在里面输入ls,保存。
b- 赋予这个文件可执行权限x
c- 在shell环境下执行:./shell.sh,即开始运行这个脚本
注意:用vim编辑,因为window下编辑,每行最后有换行符,执行会报错:invalid ‘\r’
#shell.sh
ls
2- 用户自定义变量
a- 用户自定义变量和C语言里的变量一样,但是变量=前后不能有空格!
b- 变量没有数据类型,全部被当作字符
c- 如果想打印变量,使用命令:echo $变量名
d- 变量间赋值,和C语言一样,但是注意使用$符号:被赋值变量=$赋值变量
e- 清除变量赋值,命令:unset 变量名
示例:
/*a-c */
count=5
echo $count //打印5; 若echo count只会打印count
/*d- */
count=5
tmp=$count
echo "count=$count" //打印count=5
echo "tmp=$tmp" //打印tmp=5
/*e- */
unset count //删除变量赋值
echo "count=$count" //此时打印count=
3- 命令行参数(位置变量)
命令行参数:
$0 | 文件名 |
$1到$9 | 命令行参数,就是执行脚本文件后面的参数,分别对应$1-$9 |
$# | 命令行参数个数,就是执行脚本文件后面的参数个数 |
$@ | 所有命令行参数个数,就是执行脚本文件后面的参数,和$*作用一样 |
$* | 所有命令行参数个数,就是执行脚本文件后面的参数,和$@作用一样 |
$$ | 进程PID |
注意还有个$?用于打印上次执行结果,该参数结合第2篇博客理解。
上面的命令行参数理解结合示例:
先上效果如下。
需要说明的的是:
脚本文件后面跟的参数个数以空格为区分的,多个空格当成一个空格。
命令行传入参数大于9个,如果想打印,必须加{},echo ${10}
root@ubuntu:/home/shell# ./shell.sh hello world , welcom to beijing of chain . my friends !
$0_name:./shell.sh
$#_num:12
$*_all:hello world , welcom to beijing of chain . my friends !
$@ all:hello world , welcom to beijing of chain . my friends !
$$ PID:17988
$? : 0
$1: hello
$2: world
$3: ,
$4: welcom
$5: to
$6: beijing
$7: of
$8: chain
$9: .
$10: my
$11: friends
$12: !
附脚本文件:
#shell.sh
echo "\$0_name:$0"
echo "\$#_num:$#"
echo "\$*_all:$*"
echo "\$@ all:$@"
echo "\$$ PID:$$"
echo "\$? : $?"
echo "\$1: $1"
echo "\$2: $2"
echo "\$3: $3"
echo "\$4: $4"
echo "\$5: $5"
echo "\$6: $6"
echo "\$7: $7"
echo "\$8: $8"
echo "\$9: $9"
echo "\$10: ${10}"
echo "\$11: ${11}"
echo "\$12: ${12}"
4- 环境变量
PATH、PWD、HOME等,命令行执行export可看到当前环境变量
echo $PWD
该部分内容暂不做过多理解。