shell变量
一 shell脚本创建、权限、执行
1.1 shell脚本的创建
touch hellloworld.sh
或vi helloworld.sh
1.2 赋予执行权限
chmod +x helloworld.sh
1.3 执行脚本
命令 | 注释 |
---|---|
[root@localhost ~]# ./helloworld.sh | 脚本文件路径(绝对路径与相对路径) ===>需要可执行权限 |
[root@localhost ~]# sh helloworld.sh | sh 脚本文件路径 ===>可以不需要执行权限 |
[root@localhost ~]# source helloworld.sh | source 脚本文件路径 ===>本身的路径会变化 |
[root@localhost ~]# . helloworld.sh | 通过点号来加载脚本 |
二 管道符号与重定向符号
2.1 管道操作
管道操作为不同命令之间的协同工作提供了一种机制,位于管道符号"|"左侧的命令输出结果作为右侧命令的输入(处理对象),同一行命令中可以用多个管道。
cmd 命令 1 | cmd 命令 2 | cmd 命令 n
例如:
free -m | grep “Mem” | awk ‘{print $6}’
2.2 重定向操作
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
重定向输出 | >> | 将输出结果追加到指定的文件尾部 |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
标准错误输出 | 2>> | 将错误信息追加到指定的文件尾部 |
混合输出 | &> | 将标准输出、标准错误内容保存到指定的文件(覆盖原有内容) |
混合输出 | &>> | 将标准输出、标准错误内容追加到指定的文件尾部 |
三 shell变量
3.1 变量类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量(USER HOME LANG PATH)、只读变量、位置变量($1,$2,$3……)、预定义变量
预定义变量:
变量 | 注释 |
---|---|
$# | 命令行中位置变量的个数 |
$* | 所有位置变量的内容 |
$? | 上一条命令执行后返回的状态,返回状态值为0表示执行正常,非0值表示异常或出错 |
$0 | 当前执行的进程/程序名(即返回当前程序) |
$@ | 对全部的位置参数列表进行分割 |
$* | 把全部位置参数列表看成一个整体 |
3.2 变量赋值注意点
当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号"{}"将变量名称括起来,否则将无法显示正确的变量名称,对于未定义的变量显示为空值。
3.2.1 双引号(")
主要用来界定字符串,当要赋值的内容中包含空格时必须用双引号括起来,其他情况则可以省略。
在双引号范围内可以使用"$"符号引用其他变量的值。
3.2.2 单引号(’)
在单引号的范围内,无法引用其他变量的值,所有字符均作为普通字符看待。
3.2.3 反撇号(`)
反撇号内必须是能够执行的命令行,即把反撇号里面的内容作为命令输入终端,再把输出结果作为一条新的命令输入终端。
图中“expr”表示计算,计算“12+13”的结果,得出“25”,把25作为一条命令输入,结果找不到命令……
注意:
反撇号难以多级嵌套,可使用"$()"来代替。
例如:
3.2.4 read命令
read命令用来提示用户输入信息,实现简单的交互过程。执行时从键盘读入一行内容。以空格作为分隔符,把读入的各字段依次赋值给指定的变量。
read命令可以结合"-p"和"-t"选项来设置提示信息与等待时间(默认为秒)
例如:
再来一次
3.3 变量作用范围
默认情况下,新定义的变量是局部变量,只在当前环境下有效。当输入命令“bash”进入子shell环境时,局部变量将无法使用。
可以通过命令“export”将指定变量导出为“全局变量”,可以同时操作多个变量,变量名之间以空格分隔。