Linux shell内置变量、位置参数、$符号是什么意思、代表什么含义、双引号单引号反引号作用效果

摘要

在Linux系统中,$符号扮演着至关重要的角色,尤其是在Bash shell脚本编程中。本文将详细介绍$符号的各种基础用法,帮助用户更好地理解和运用它。

内置变量

  • NR :当前记录(行)号。

  • NF :当前记录的字段数量。

  • FS :字段分隔符(默认为空格或制表符)。

  • OFS :输出字段分隔符(默认为空格)。

  • RS :记录分隔符(默认为换行符)。

  • ORS :输出记录分隔符(默认为换行符)。

$用法整理

1. $a 获取变量a的值
在Linux中,$符号用于获取变量的值。例如,如果你设置了变量`a=1`,可以通过`echo $a`来打印变量`a`的值,即1。需要注意的是,为了防止变量中的空格和其他特殊字符导致问题,推荐在引用变量时使用双引号,如`echo "$a"`。

2. $0, $1, $n
在命令行参数中,$0代表脚本的名字,$1, $2, ..., $n分别代表传递给脚本的第一个、第二个、直至第n个参数。

3. $#
$#返回参数的数量,即传递给脚本或函数的参数总数。

4. $@ 和 $*
`$@`包含所有参数,每个参数都被双引号包围,而`$*`则将所有参数视为一个单独的字符串。例如,如果传递了两个参数`arg1`和`arg2`,`echo "$@"`将分别显示`arg1`和`arg2`,而`echo "$*"`将显示`arg1 arg2`。

5. $?
$?返回上一个命令的退出状态。如果命令执行成功,其值为0,否则为非零值。

6. $()
这是命令替换的语法,用于执行命令并将结果插入到当前命令行中。例如,`echo "Today is $(date)"`将打印当前日期。

7. ${}
用于变量的扩展和操作,比如`${var:-default}`表示如果`var`未定义,则使用`default`作为默认值。还有`${var#pattern}`,它会去除`var`前面匹配`pattern`的部分。

8. ${#var}
返回变量`var`的值的长度。

9. $[] 或 `[ ]`
这是条件测试命令,用于检查表达式的真假。例如,`[ "$a" == "i am skyler" ]`会判断变量`a`的值是否等于字符串`i am skyler`。

10. $-
显示当前shell选项的设置。这些选项影响shell的行为。

11. $!
返回最近后台进程的进程ID

12. $$
返回当前进程ID,通常是运行的shell的ID。

13. !$ 和 !!
`!$`引用最后一个命令的最后一个参数,而`!!`引用整个上一条命令


特殊用法说明

"$a" 不做词法分析
使用双引号`"`包围$符号可以保护变量免受shell词法分析的影响,确保变量内容按原样处理。例如,如果`a="i am skyler"`,`echo "$a"`将输出整个字符串,而`echo $a`可能会导致解析错误,因为它会尝试将字符串视为多个参数。


掌握这些$符号的用法能够显著提升在Linux环境中工作的效率,避免因对符号理解不准确而产生的错误。虽然在面试中可能不常被问及,但在日常的系统管理和脚本编写中却是不可或缺的知识点。通过实践和理解这些用法,你将能更熟练地驾驭Linux系统。

三种引号

在Linux系统中,有着三种引号——单引号、双引号和反引号。这三个引号的作用如下:

  • 双引号:可以把引号内的内容作为一个整体,保留特殊符号,不做特殊处理。(弱引用,可以实现变量替换)
  • 单引号:除了作为一个整体外,还可以将引号内的所有内容转义为单纯的字符串。(强引用,不完成变量替换)
  • 反引号:把引号内的命令执行后返回结果。(命令替换)
[root]# echo "$PATH"
/usr/local/java/jdk1.8.0_202/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root]# echo '$PATH'
$PATH
[root]# echo `date +%F-%H-%M-%S`
2025-01-21-15-13-45

附件一:Linux基本操作

1. 目录操作

  • pwd‌:显示当前所在目录的绝对路径。

  • cd‌:切换目录。

    cd /path/to/directory # 进入指定目录 
    cd .. # 返回上级目录 
    cd ~ # 返回用户主目录
  • ls‌:列出目录内容。

    ls # 列出当前目录内容 
    ls -l # 详细列表(权限、大小、时间) 
    ls -a # 显示隐藏文件(以`.`开头) 
    ls -lh # 文件大小以易读格式(KB/MB)显示
  • mkdir‌ / ‌rmdir‌:创建/删除目录。

    mkdir my_folder # 创建目录 
    mkdir -p a/b/c # 递归创建多层目录 
    rmdir empty_folder # 删除空目录

2. 文件操作

  • touch‌:创建空文件或更新文件时间戳。

    touch file.txt
  • cp‌:复制文件或目录。

    cp file.txt file_backup.txt # 复制文件 
    cp -r dir1 dir2 # 递归复制目录
  • mv‌:移动/重命名文件或目录。

    mv file.txt new_location/ # 移动文件 
    mv old_name.txt new_name.txt # 重命名文件
  • rm‌:删除文件或目录(⚠️ 谨慎使用)。

    rm file.txt # 删除文件 
    rm -r directory # 递归删除目录及其内容 
    rm -f file.txt # 强制删除(不提示确认)
  • cat‌ / ‌less‌ / ‌head‌ / ‌tail‌:查看文件内容。

    cat file.txt # 显示整个文件内容 
    less file.txt # 分页查看文件(按`q`退出) 
    head -n 5 file.txt # 显示文件前5行 
    tail -n 10 file.txt # 显示文件末尾10行 
    tail -f log.txt # 实时追踪文件更新(常用于日志)

3. 权限管理

  • chmod‌:修改文件权限。

    chmod +x script.sh # 添加执行权限 
    chmod 755 file.txt # 权限设置为rwxr-xr-x
    # 权限数字表示法:r=4, w=2, x=1
  • chown‌:修改文件所有者。

    chown user:group file.txt

4. 查找与搜索

  • find‌:查找文件。

    find /path -name "*.txt" # 按名称查找 
    find . -type d # 查找所有目录
  • grep‌:文本搜索。

    grep "keyword" file.txt # 在文件中搜索关键词 
    ps aux | grep "nginx" # 结合管道搜索进程 
    grep -r "error" /var/log/ # 递归搜索目录中的关键词

5. 进程管理

  • ps‌:查看进程状态。

    ps aux # 显示所有运行中的进程
  • kill‌:终止进程。

kill 1234 # 终止PID为1234的进程 
kill -9 1234 # 强制终止进程
  • top‌ / ‌htop‌:实时查看系统资源占用。


6. 输入输出重定向

  • >‌ / ‌>>‌:重定向输出。

    echo "Hello" > output.txt # 覆盖写入文件 
    echo "World" >> output.txt # 追加到文件末尾
  • |‌(管道):将前一个命令的输出作为后一个命令的输入。

    cat file.txt | grep "error" | sort

7. 环境变量与别名

  • 环境变量‌:

    echo $PATH # 查看PATH变量 
    export MY_VAR="123" # 设置临时环境变量
  • alias‌:创建命令别名。

    alias ll='ls -lh' # 输入`ll`等效于`ls -lh`

8. 帮助与文档

  • man‌:查看命令手册。

    man ls
  • --help‌:快速查看命令帮助。

    ls --help

示例:组合命令

# 统计当前目录中.txt文件的行数总和 
find . -name "*.txt" | xargs wc -l 
# 将当前时间写入日志文件并压缩 
date >> log.txt && tar -czvf log.tar.gz log.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞火流星02027

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值