1. 变量的定义
1.1 变量名可以由字母、数字、下划线组成,但数字不能作为变量名的第一个字符。
1.2 通过赋值符号“=”来定义变量的值,e.g:
myname='test', 字符串类型,不解析任何字符
myname="abcd", 双引号内部会解析$和反斜杠特殊字符
num=100; price=1.2345
now_date=`date`, 反引号会执行系统命令。
2. 变量的引用
2.1 使用美元符号$加变量名,来引用一个变量的值,e.g:
定义变量:test = "hello demo", 输出变量:echo $test
2.2 变量名外面的花括号, 主要是为了帮助解释器识别变量的边界,e.g.:
language = 'Java' echo "I am a ${language}Coder", 在这种情况下,如果不加花括号,解释器会误以为是饮用lanuageCoder这个变量的值,而导致出错。
3. 简单示例:
4. 环境变量
4.1 环境变量是指在操作系统中用来质地ing操作系统运行环境的一些参数,e.g. PATH等。
4.2 常见的环境变量:
PATH: 系统路径
HOME: 当前用户家目录
HISTSIZE: 保存历史命令纪录的条数
LOGNAME: 当前用户登录名
HOATNAME: 主机名称
SHELL: 当前用户用的是哪种shell
LANG: 和语言相关的环境变量
MAIL: 当前用户的邮件存放目录
4.3 查看环境变量:
env: 显示所有环境变量
5. 局部变量
5.1 在shell脚本中由用户自定义的变量:作用域为从被定义的地方开始,到shell脚本结束为止,起作用域为本脚本,离开本脚本,变量无效,e .g.:
编写一个脚本,定义一个变量,输出结果,退出脚本,再输出这个变量,将看不到结果:
5.2 在用户登录的shell中定义的变量,重新登录后该变量消失,e.g.
6. 预定义变量
6.1 预定义变量和环境变量类似,也是在shell一开始就定义了的变量。不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有的预定义变量都是由$符和另一个符号组成的。
6.2 常用的shell预定义变量:
$#: 位置参数的数量
$*: 所有位置参数的内容
$?: 命令执行后返回的状态,0表示成功,非0表示失败
$$: 当前进程的进程号
$!: 后台运行的最后一个进程号
$0: 当前执行的进程名
6.2 简单示例:
7. 输出与输入
7.1 echo命令发送数据到标准的输出设备,数据采用的是字符串方式,echo中有两个重要参数:
-e: 识别输出内容里的转义序列,e.g. echo -e "hello\tworld"
-n: 忽略结尾的换行, e.g:echo -e -n "hello\tworld"
7.2 printf命令和echo的功能类似,printf也可以输出变量,而且可以按照格式输出变量,不过printf的默认输出没有换行,换行需要自己加“\n”,e.g:
7.3 read命令读取标准输入设备的下一行,标准输入中的新一行到换行符前的所有字符都会被读取,并赋予给对应的变量,e .g.:
7.4 "<<" 是一种重定向符,重定向脚本文件中的一行作为到一个命令的输入,操作符 <<被放在输入重定向的命令之后,紧跟<<的各行作为命令的输入,输入的结尾通过文件结束符(ctrl+D)表示,也可以自己定义定界符,定界符后的单词作为输入各行结束的定界符,另外定界符需要顶格写,e.g. 通过脚本自动连接ftp服务器来下载数据:
#!/bin/sh
ftpserver=127.0.0.1
ftp -i -n <<! #!为定界符
open $ftpserver
usr account password #具体的操作账号和密码
cd testdir
bin
get test.txt
bye
!