当前位置: 首页 > article >正文

LinuX---Shell---变量

 系统预定义变量

常用系统变量

PATH、HOME、PWD、SHELL、USER等

获取变量的值

语法:$变量名

$和变量名之间不能有空格。 

案例实操

查看系统变量的值

feng@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
feng@ubuntu:~$ echo $HOME
/home/atguigu

显示当前Shell中所有变量:set

feng@ubuntu:~$ set

BASH=/bin/bash‘
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
……

自定义变量

基本语法

  1. 定义变量:变量名=变量值,注意,=号前后不能有空格
  2. 撤销变量:unset 变量名。
  3. 声明静态变量:readonly变量,注意:不能重新赋值,不能unset。

变量定义规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
  2. 等号两侧不能有空格。
  3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
  4. 变量的值如果有空格,需要使用双引号或单引号括起来。
  5. 最右侧分号可有可无,一般都不写

案例实操

定义变量A

注意:5是字符串

feng@ubuntu:~$ A=5
feng@ubuntu:~$ echo $A
5

给变量A重新赋值

feng@ubuntu:~$ A=feng
feng@ubuntu:~$ echo $A
feng

撤销变量A

feng@ubuntu:~$ A=feng
feng@ubuntu:~$ echo $A
feng

声明静态(只读)的变量B=2,不能修改和unset

feng@ubuntu:~$ readonly B=2
feng@ubuntu:~$ echo $B
2
feng@ubuntu:~$ B=9
bash: B: 只读变量
feng@ubuntu:~$ unset B
bash: unset: B: 无法取消设定:只读variable

在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

feng@ubuntu:~$ C=1+2
feng@ubuntu:~$ echo $C
1+2

变量的值如果有空格,需要使用双引号或单引号括起来

feng@ubuntu:~$ D=I love banzhang
找不到命令 “love”,但可以通过以下软件包安装它:
sudo snap install love  # version 11.2+pkg-d332, or
sudo apt  install love  # version 11.3-1
输入 "snap info love" 以查看更多版本。
feng@ubuntu:~$ D="I like banzhang"
feng@ubuntu:~$ echo $D
I like banzhang

可把变量提升为全局环境变量,可供其他Shell程序使用

语法:export 变量名

feng@ubuntu:~$ vim helloworld.sh

在helloworld.sh文件中增加echo $B。

#!/bin/bash

echo "helloworld"
echo $B

保存退出。

feng@ubuntu:~$ B=3
feng@ubuntu:~$ ./helloworld.sh 
helloworld

发现并没有打印输出变量B的值。

feng@ubuntu:~$ export B
feng@ubuntu:~$ ./helloworld.sh 
helloworld
3
注意:必须在同一个窗口中运行测试(必须得是在同一个进程中)

发现3出现了 

特殊变量

$n---外部写入脚本内

基本语法

$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}。)

案例实操

feng@ubuntu:~$ vim parameter.sh

写入以下内容。

#!/bin/bash
echo '==========$n=========='
echo $0 
echo $1 
echo $2

保存退出。

feng@ubuntu:~$  bash ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz

$#---可以获得传了多少个参数

基本语法

$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性。)。

案例实操

feng@ubuntu:~$ vim parameter.sh

#!/bin/bash
echo '==========$n=========='
echo $0 
echo $1 
echo $2
echo '==========$#=========='
echo $#

feng@ubuntu:~$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
==========$#==========
2

​$*、$@---对于多个参数可以视为一个整体

基本语法

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。)

$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。)---在for执行时,会被拆分

案例实操

feng@ubuntu:~$ vim parameter.sh

脚本中写入以下内容。

#!/bin/bash
echo '==========$n=========='
echo $0 
echo $1 
echo $2
echo '==========$#=========='
echo $#
echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@

保存退出。

feng@ubuntu:~$ ./parameter.sh a b c d e f g
==========$n==========
./parameter.sh
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g

说明

$*和$@的区别需要结合循环说明。

$?---判别

基本语法

$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。)

案例实操

判断helloworld.sh脚本是否正确执行

feng@ubuntu:~$ ./helloworld.sh 
hello world
feng@ubuntu:~$ echo $?
0
feng@ubuntu:~$ xxx    #错误命令
feng@ubuntu:~$ echo $?
127


http://www.kler.cn/a/588824.html

相关文章:

  • 2025-03-13 学习记录--C/C++-PTA 练习2-14 求奇数分之一序列前N项和
  • STM32上实现简化版的AUTOSAR DEM模块
  • C++:类和对象(从底层编译开始)详解[前篇]
  • CF 230B. T-primes
  • zend server试用分析
  • C++程序设计语言笔记——抽象机制:运算符重载
  • 电机控制常见面试问题(十)
  • SpringBoot入门-(1) Maven【概念+流程】
  • 【设计模式】通过访问者模式实现分离算法与对象结构
  • 串口全解析
  • Python库安装报错解决思路以及机器学习环境配置详细方案
  • Nacos命名空间Namespace:微服务多环境管理的“秘密武器”如何用?
  • Flutter中的const和final的区别
  • k8s集群----helm部署wordpress
  • chatgpt的一些prompt技巧
  • 【人工智能基础2】机器学习、深度学习总结
  • 2、操作系统之软件基础
  • VSCode 自动格式化:ESLint 与 Prettier
  • 5G时代新基建:边缘节点如何将云计算响应速度提升300%“
  • Element Plus开发实战指南:快速上手Vue 3企业级组件库