一、基本语法
在Shell编程不需要事先定义变量,也没有变量类型的区分(所有变量都是字符串),可以说“=”和“$”就是Shell变量的一切。Shell变量以字母或“”开头,由字母、数字和“”组成,变量名区分大小写
“=”,赋值符号。等号两边不可以有空格
#直接赋值 A=aaa A="Hello word!" A='Hello word!' #但引号和双引号都行,但还是有区别的,后面会讲到 #传命令的输出值 A=`ls /etc`
**“$”,取值符号。**dollar符后面直接加变量名即可
#直接取变量的值 B=$A #取命令的输出值 B=$(ls /etc)
命令可以接受变量作为参数
#需要取值,不能直接把变量名写上 echo $B
双引号与单引号的区别
双引号里面可以解析特殊字符,而单引号括起来的字符串是纯字符串NAME=DK echo "My name is $NAME" #输出My name is DK echo 'My name is $NAME' #输出My name is $NAME
字符串重组
#例一 MYHOME=/home/DK ls $MYHOME/Document #以上命令等同于 ls /home/DK/Document #例二,与上例不同的是变量名后没有特殊符号隔开 STRING=String echo ${STRING}One #以上命令等同于 echo StringOne #注,echo $STRINGOne 这样写的话系统是无法辨识变量的
set命令和unset命令
set命令可以列出所有变量,而unset后跟变量名会卸载该变量set | grep STRING #输出NAME='String' unset STRING #该变量被卸载
二、位置变量和特殊变量
位置变量和特殊变量都是Shell脚本固有的变量
位置变量
- $0 脚本名称 - $N 参数N
特殊变量
$# 表示变量的个数,常用于循环
$@ 当前命令行所有参数。置于双引号中,表示个别参数
$* 当前命令行所有参数。置于双引号中,表示将命令行所有参数当初一个单独参数
$-(连字号) 在引用数给予Shell的选项
$? 表示上一个命令退出的状态
$$ 表示当前进程编号
$0 表示当前程序名称
$! 表示最近一个后台命令的进程编号
$HOME 表示当前用户根目录
$IFS 表示内部的字段分隔符
$LANG 当前locale默认名称
$PATH 环境变量
$PPID 父进程编号
$PWD 当前工作目录
#-------------------------------------
“$?”的参考值
0 成功退出
>0 退出失败
1-125 命令退出失败,失败返回的相关值由程序定义(譬如,程序内退出只执行 exit 2,则返回为2)
126 命令找到了,但无法执行
127 命令找不到
>128 命令因受到信号而死亡