【Linux命令-shell】虚拟机中的变量——linux命令shell

2023-05-16

目录

1、自定义变量

2、操作系统定义的变量

2.1环境变量

 2.2位置变量

2.3预定义变量

 3、变量扩展引用

3.1各种引号

3.2read命令定义变量

3.3全局或局部变量


1、自定义变量

自定义变量:以固定名存放有变化的值

定义格式:  变量名=变量值

取消定义的变量  unset 变量名

注:=两边不能有空格,不要用关键字做变量名,例如:ls,cd等

如果变量已存在,则会覆盖之前的变量值

变量名称有:字母/数字/下划线组成,不能以数字组成

调用语法格式: $变量名 或 ${变量名} 加上花括号是为了防止异常

例如:

定义: a=11     调用:echo $a

定义: x=centos   调用:echo $x  如果想要在x后加上其他内容  echo ${x}7.8  则会输出centos7.8

2、操作系统定义的变量

①环境变量(变量名通常大写,有操作系统维护)

②位置变量(bash内置 存储脚本执行的参数)

③预定义变量(bash内置 可以调用但不可以赋值或修改)

④自定义变量(用户自主设置)

2.1环境变量

存在于/etc/profile或~/.bash_profile ;env可以列出所有的环境变量

如:

PATH:命令搜索变量

PWD:当前路径

USER:当前用户名

UID:当前用户的ID号

HOME:当前用户的家目录

SHELL:用的什么shell

 2.2位置变量

使用$n表示,n表示数字序列号

例如:

$1,$2,$3·······$9,${10},${11} 注意1~9不需要写{},之后的都需要写{}

演示:创建一个vars.sh文件,在文件内写入

执行

2.3预定义变量

 用来保存脚本的执行信息

直接使用这些变量,不能直接为这些变量赋值

$0 当前所在的脚本名或进程

$$当前运行进程的PID号

$?命令执行后的返回状态,0正常,1或其他异常

$#已加载的位置变量的个数

$*所有位置变量的值

 3、变量扩展引用

3.1各种引号

双引号" "允许扩展(可以取变量的值),以$引用

单引号' '禁止扩展(不能取变量的值),$视为普通字符

反引号` `将命令执行输出结果作为变量值,$()与反引号等效

创建文件:

touch a b c   创建了三个文件

touch "a b c" 创建了一个文件 ,与touch 'a b c'等效

删除文件: rm -rf 文件名

 双引号和单引号输出结果的区别

 注:无特殊符号时,单引号、双引号作用是一样的。

3.2read命令定义变量

 read 命令定义变量

read从键盘读入变量值完成赋值 ,   read 变量名

格式:read [ -p "提示信息" ] 变量名

-p可选

-t可指定超时秒数

-s设置是否在终端显示输入的内容

 创建一个read.sh文件,写入如下的内容

注意:在Ubuntu中 echo "$pass" | passwd --stdin $name不能使用,目前还在找替换的命令,如果你用的其他的虚拟机可以试试哦

调用并输入用户名和密码

./read.sh

注意:read -p "请输入密码" pass 是一个明文输入,不安全,如果需要暗文输入请输入以下命令

read -s -p "请输入密码:" pass  或者 read -p "请输入密码" pass -s

read -t 3 iname 表示在3秒内赋值 而read iname是默认一直等

3.3全局或局部变量

 全局变量,在当前shell以及子shell环境均有效

局部变量,新定义的变量默认只有在当前shell环境中有效,无法在子shell环境中有效,无法在子shell环境中使用

x=11 局部变量

export y=22 全局变量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux命令-shell】虚拟机中的变量——linux命令shell 的相关文章

  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 如何正确使用fork、exec、wait

    我正在编写的 shell 需要执行用户提供给它的程序 这是我的程序的非常简短的简化版本 int main pid t pid getpid this is the parents pid char user input NULL size
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 如何检查主机是否在您的known_host ssh中

    我的脚本中使用以下命令 将主机添加到 ssh 中的已知主机 VAR2 expect c spawn ssh o StrictHostKeyChecking no REMOTE HOST USER REMOTE HOST IP expect
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐