shell变量+处理字符工具

本文主要介绍了Bash中的变量规则与分类,包括用户自定义、环境和预定义变量等。阐述了数值运算方法,因变量默认是字符串型,需指定为数值型才能运算。还介绍了变量测试与替换、配置文件、通配符和正则表达式的使用,以及字符截取命令和sed轻量级流编辑器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • \放在命令最后表示连接下一行
变量规则
  1. Bash中变量默认的是字符串型,如要进行数值运算,需要修改变量的类型,指定为数值型
  2. 变量赋值等号两边不能有空格
变量分类
  1. 用户自定义变量
  2. 环境变量,保存操作系统环境相关数据
  3. 预定义变量,(相当于脚本传入变量)
  • set 打印系统所有变量
  • unset name 变量删除 unset time
  • PATH系统查找命令的路径
    临时修改环境变量PATH="$PATH:/tmp",PATH是由冒号分割的
PS1定义系统提示符的变量
位置参数变量分类(预定义变量的一种)
  1. $n n=0代表当前命令本身,其他的参数按顺序排,超过9${10}
  2. $0:输出命令本身.
  3. $@:所有参数看成独立,$*:所有参数看成整体.
#!/bin/bash
for i in "$*"
    do
        echo $i
    done
for i in "$@"
    do
        echo $i
    done
预定义变量
  1. $?:命令的返回值.最后一次执行命令是否成功,0代表成功,其余表错误
  2. $\$\$$:当前进程的进程号
  3. $!:后台运行的最后一个进程号
read
  1. -s:隐藏输入,
  2. -t:允许输入的时间
  3. -p:输入打印的字符
  4. -n:输入的字符数
    read [选项] [变量名]
    read -p "your name " -s -t 30
    read -n 2 -s -p "Pleasr enter your name" -t 30 name
数值运算(shell中变量默认为字符串类型)
#!/bin/bash
a=11
b=22
c=$a+$b
echo $c
  1. declare: 声明变量类型
  1. -p:显示变量类型
    declare -p PATH
  2. -i:声明为integer
  3. -x:声明为环境变量
  • 声明为int在运算
#!/bin/bash
a=1
b=2
declare -i c=$1+$2
echo $c
----
#!/bin/bash
a=1
b=1
c=$a+$b
echo $c
daclare -i c=$a+$b
echo $c
  • $((运算式)) 或者 $[运算式]
变量测试与变量替换
  1. abc这个变量名字可以任意替换,将abc这个变量理解为x=${y-0}
x=${y-abc}
echo $x

1.1 y为空,则x=abc
1.2 y=1,则x=1
2. 用的时候查表

一些配置文件
  1. /root/.bash_logout注销时的配置文件
  2. /root/.bash_history历史命令保存的文件(注销之后才写入)
  3. shell登录信息
    1.本地终端的登录信息/etc/issue


    2.远程登录/etc/issue.net,配置文件不生效的原因是ssh的配置文件/etc/ssh/sshd_config决定,修改Banner /etc/issue.net这行,会显示/etc/issue.net
  4. 登录后的信息(远程或本地登录都会生效) /etc/motd
通配符用来匹配文件名
  • 通配符是完全匹配,
  • ls find cp这些命令不支持正则,
  • ls -l f*
正则表达式匹配字符串
  • 在文件中匹配符合条件的字符串
  • 包括匹配
字符截取命令
  1. cut:对比grep提取行,cutawk是用来提取列中文字
  1. -d:默认分割符:列之间的换行符tab,修改分隔符
  2. -f:提取的列数
    cat /etc/passwd | grep /bin/bash | cut -d ":" -f 1,3
  1. printf 格式化输出,
    printf "%s %s\n" $(cat student) $(cat student)引用系统命令

系统有printf没有print命令,awk中2个都有,
printprintf自动加入换行符

  1. awk

awk '[pattern1]{act1}[pattern2]{act2}' 文件名
awk '模式1{动作1} 模式2(条件2){动作2}' 文件名

  1. 可以从行中提取列
    awk '{printf $2"\t"$4"\n""} student'
  2. df -h | awk '{printf $1 "\t" $2 "\t" $4 "\n"}'
    df -h | awk '{print $1 "\t" $3 "\t" $4}'
    效果相同
  3. cutawkgrep混用
    df -h | grep "vda1" | awk '{print $5}' | cut -d "%" -f 1,
    cut7%%作为分隔符,数字作为第1列提取出来
  1. BEGIN后的{}列出来的操作,在读入输入之前执行,END后的{}列出来的操作在读入输入完成后执行
  1. awk默认识别的分隔符是制表符,或者空格
    FS内置变量,来指定分隔符,
    awk '{FS=":"}{print $2 "\t" $4}' /etc/passwd
  1. 在指定FS=":"时,先读入第一行再来指定分隔符,使用BEGIN在读入之前修改分隔符
    awk 'BEGIN{FS=":"}{print $2 "\t" $5}' /etc/passwd
  1. 通过条件对数据进行筛选, 例:
    cat student | grep -v "Name" | awk '$6>90{print $2}BEGIN{print "Who is best"}END{print "The end"}'
sed(轻量级流编辑器)
  • sed [option] 'command' file
    sed 选项 '命令' 文件名
  • 选项:
  1. -n,sed一般会将所有的数据打印,-n只打印经过处理的行
  2. -i:同时修改源文件,不打印在屏幕上
  3. -e:多条sed命令编辑
  • 命令:
  • sed -n '2,3p' student:2,3p表示第2行到第3行.
  1. sed -n '1p' student :p打印第一行
    sed '1p' student,对比缺少-n的效果
    df -h | sed -n '2p'
  2. `sed ‘2d’ studen
  • 字符串替换
  1. sed 'ns\原内容\新内容\g' student:
    n表示第n行,否则全部原内容被替换
    s:替换指定字符
    g:获得内存缓冲区的内容,代替当前模板(文件)内的文本
    sed '3s\84\90\g' student
  • -e 多sed命令,中间是;
    sed -e 's\Gao\Anthony\g ; s\Sc\Sb\g' student


    sed -e 's\Gao\ \g ; s\Sc\ \g' student
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值