Shell脚本学习笔记-变量使用及输入输出

时间:2021-02-25 15:34:54

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. 简单示例:

Shell脚本学习笔记-变量使用及输入输出

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.:

编写一个脚本,定义一个变量,输出结果,退出脚本,再输出这个变量,将看不到结果:

Shell脚本学习笔记-变量使用及输入输出

5.2 在用户登录的shell中定义的变量,重新登录后该变量消失,e.g.

Shell脚本学习笔记-变量使用及输入输出

6. 预定义变量

6.1 预定义变量和环境变量类似,也是在shell一开始就定义了的变量。不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有的预定义变量都是由$符和另一个符号组成的。

6.2 常用的shell预定义变量:

$#: 位置参数的数量

$*: 所有位置参数的内容

$?: 命令执行后返回的状态,0表示成功,非0表示失败

$$: 当前进程的进程号

$!: 后台运行的最后一个进程号

$0: 当前执行的进程名

6.2 简单示例:

Shell脚本学习笔记-变量使用及输入输出

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:

Shell脚本学习笔记-变量使用及输入输出

7.3 read命令读取标准输入设备的下一行,标准输入中的新一行到换行符前的所有字符都会被读取,并赋予给对应的变量,e .g.:

Shell脚本学习笔记-变量使用及输入输出

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
!