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”将指定变量导出为“全局变量”,可以同时操作多个变量,变量名之间以空格分隔。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cenjeal/article/details/107952005