Linux系统编程---shell脚本语法

变量

  • 变量声明不使用数据类型,默认类型为字符串。
  • 变量名区分大小写,通常由字母、数字和下划线组成,但不能以数字开头。
  • 变量赋值时不加空格,如VAR=value
  • 使用变量时加上$符号,如$VAR

环境变量

环境变量的特点
  • 全局可访问: 环境变量在定义后可以被当前Shell及其子进程访问。
  • 命名规范: 通常由大写字母、数字和下划线组成,例如PATHHOME等。名称区分大小写。
 常见的环境变量
  • PATH: 定义了操作系统用来查找可执行文件的目录列表。各个目录之间使用冒号(:)分隔。
  • HOME: 当前用户的主目录路径。
  • USER: 当前用户的用户名。
  • SHELL: 当前Shell的路径。
  • PWD: 当前工作目录。
  • OLDPWD: 上一个工作目录。
  • LANG: 系统的语言和地区设置
环境变量的设置和使用
  • 查看环境变量: 使用echo命令,如echo $PATH
  • 设置环境变量: 使用export命令,如export VAR=value。这样定义的环境变量会被当前Shell会话及其子进程继承。
  • 本地变量: 只在当前Shell进程中有效的变量。它们通过简单赋值定义,如VAR=value,而不使用export

 位置变量

位置变量是Shell脚本中的一种特殊变量,用于访问传递给脚本或函数的参数。它们被称为“位置”变量是因为它们的名称是根据参数的位置确定的。

基本位置变量
  • $0: 表示脚本或命令本身的名字。这通常是脚本的文件名或命令的名称。
  • $1, $2, $3, ...: 表示传递给脚本或函数的第一个、第二个、第三个等参数。参数的位置从1开始编号。
特殊位置变量
  • $#: 表示传递给脚本或函数的参数的个数。
  • $@: 表示传递给脚本或函数的所有参数,每个参数都作为独立的字符串存在。通常在双引号中使用,如"$@",这样会将每个参数视为单独的字符串,保持参数原有的分割性。
  • $*: 表示传递给脚本或函数的所有参数,参数作为一个单一的字符串存在。通常在双引号中使用,如"$*", 这样所有的参数将被视为一个整体。
  • $?: 表示上一个命令的退出状态。成功执行通常返回0,失败返回非零值。
  • $$: 表示当前Shell进程的进程ID (PID)。
  • $!: 表示最后一个后台进程的进程ID (PID)。
 使用位置变量的注意事项
  • 位置变量是只读的,无法直接修改。
  • 参数的位置在调用时固定,位置变量的值不会因为其他变量的改变而变化。
  • $@$*的区别在于双引号中的表现:"$@"会将每个参数作为独立的单元处理,而"$*"会将所有参数合并为一个字符串。

文件信息 

llls -l的快捷命令,用于列出目录中的文件和子目录,并显示详细信息。每一行输出的信息表示一个文件或目录的详细信息,包括权限、链接数、所有者、组、大小、修改时间等

文件类型和权限
第一列由10个字符组成,用于显示文件的类型和权限。

  • 第一个字符表示文件类型:
    • - 表示普通文件。
    • d 表示目录。
    • l 表示符号链接(软链接)。
    • c 表示字符设备文件。
    • b 表示块设备文件。
    • s 表示套接字文件。
    • p 表示命名管道文件

后面9个字符分为3组,每组3个字符,表示文件所有者、所属组和其他用户的权限。每组三个字符表示读(r)、写(w)、执行(x)权限:

  • r: 读权限
  • w: 写权限
  • x: 执行权限
  • -: 无权限
  • 链接数
    第二列表示链接数,即有多少个硬链接指向该文件或目录。对于目录,它表示有多少个子目录。

  • 所有者
    第三列表示文件的所有者(用户)。


  • 第四列表示文件所属的组。

  • 文件大小
    第五列表示文件的大小(以字节为单位)。对于目录,它通常显示的是目录文件本身的大小。

  • 最后修改时间
    第六列表示文件的最后修改时间。具体格式为月 日 时间/年,当文件的最后修改时间是六个月内的显示格式为月 日 时间,而超过六个月的显示格式为月 日 年份

  • 文件名
    最后一列表示文件的名称或目录的名称。对于符号链接,还会显示链接的目标。

  • drwxr-xr-x  2 user group 4096 Aug  1 12:34 example_directory
    -rw-r--r--  1 user group  123 Aug  1 12:34 example_file.txt
    lrwxrwxrwx  1 user group   11 Aug  1 12:34 example_link -> target_file
    

  • example_directory 是一个目录(由d`表示),所有者和组有读取、写入和执行权限,其他用户只有读取和执行权限。链接数为2。
  • example_file.txt 是一个普通文件,所有者有读取和写入权限,组和其他用户只有读取权限。文件大小为123字节。
  • example_link 是一个符号链接(由l表示),它指向target_file

 运算

 

1. 算术运算
  • $(( ... )): 这是Shell中的内建算术计算方式,支持基本的算术运算符。
    • 加法:+
    • 减法:-
    • 乘法:*
    • 除法:/
    • 取模:%
    • 递增:++
    • 递减:--

例如,计算两个变量ab的和可以写作result=$((a + b))

2.expr命令
  • expr命令用于评估表达式并返回结果。它是一个外部命令,通常用于较简单的算术运算。
  • 使用时,运算符和操作数之间必须有空格。
  • 例如:result=$(expr 3 + 2)
3. 基本赋值
  • 语法: VAR=value
  • 等号两边不能有空格,否则会被解释为命令和参数。

if语句 

 基本语法
if [ condition ]; then
    # 当条件为真时执行的命令
elif [ another_condition ]; then
    # 当另一个条件为真时执行的命令
else
    # 当上述所有条件都不为真时执行的命令
fi
文件测试
  • -e file:判断文件是否存在。
  • -f file:判断是否为普通文件。
  • -d file:判断是否为目录。
  • -r file:判断文件是否可读。
  • -w file:判断文件是否可写。
  • -x file:判断文件是否可执行。
#!/bin/bash

# 检查文件是否存在
if [ -e "/path/to/file" ]; then
    echo "文件存在"
elif [ -d "/path/to/directory" ]; then
    echo "目录存在"
else
    echo "文件和目录均不存在"
fi
整数比较
  • [ number1 -eq number2 ]:等于。
  • [ number1 -ne number2 ]:不等于。
  • [ number1 -lt number2 ]:小于。
  • [ number1 -le number2 ]:小于等于。
  • [ number1 -gt number2 ]:大于。
  • [ number1 -ge number2 ]:大于等于。

while语句 

基本语法
while [ condition ]; do
    # 循环体
    # 当条件为真时执行的命令
done
 计数器
#!/bin/bash

count=1
while [ $count -le 5 ]; do
    echo "Count is $count"
    count=$((count + 1))
done

while循环会打印从1到5的数字,每次迭代后count变量递增1,直到条件$count -le 5不再满足为止

文件读取
#!/bin/bash

filename="file.txt"

while read -r line; do
    echo "Read line: $line"
done < "$filename"

for语句

基本语法
for variable in value1 value2 value3; do
    # 循环体
    # 对每个值执行的命令
done
  • variable 是循环中用于存储当前值的变量。
  • value1value2value3 是待遍历的值。
范围遍历 
for variable in {start..end}; do
    # 循环体
    # 对每个值执行的命令
done

until语句

until循环的逻辑与while循环相反:until循环在条件为假时继续执行,条件变为真时停止执行。

基本语法
until [ condition ]; do
    # 循环体
    # 当条件为假时执行的命令
done
示例
#!/bin/bash

count=1
until [ $count -gt 5 ]; do
    echo "Count is $count"
    count=$((count + 1))
done

在这个示例中,until循环会持续执行,直到count大于5。每次迭代中,count的值都会递增1。

 笔记详解

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值