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

linux shell操作- 01 基础必备

文章目录

  • shell脚本执行方式
  • 常用符号及命令
  • 变量
  • 分支
  • 循环
  • 函数
  • 函数案例

shell脚本执行方式

  • shell脚本就是将linux命令放入文本文件中,由解释器执行;
  • bash解释器执行
shlauf.sh
  • 自己执行
    • 必须以#!/bin/bash 开头;
    • 必须具有可执行权限;
# 修改权限chmodu+x lauf.sh# 执行./lauf.sh

其本质还是使用文件开头的/bin/bash 解释器执行的。

常用符号及命令

  • 命令行提示符以$结尾,表示普通用户;以#结尾表示root用户(最高权限);脚本中#表示注释,同python
    • 查看当前shell版本 -> $SHELL or $0
    • root用户id 为0 -> echo $UID
    • PS1 变量表示命令提示符内容,如PS1=“\e\u@\h~\w”
  • 打印输出
    • echo 输出并自动换行
    • printf 输出且不换行
# 输出字符串并换行,后面的内容均当做字符串echohello world# 输出且不换行echo-n"hello world"# 输出带有转义的字符echo-e"\t\n"# 带有颜色的输出echo-e"\e[1;42m hello world\e[0m"# printf 同C语言中printf()printf"%-20s\n"jack# %4.2f -表示左对齐 默认右对齐 宽度不够空格补# %d
  • 查看文件内容

    • cat lauf.sh 查看内容
    • head lauf.sh 查看开头
    • tail -f lauf.sh 查看结尾
    • vim lauf.sh 编辑文件
    • touch lauf.sh 创建文件
    • ls -l lauf.sh 查看文件详情
  • 替换文本

    • tr , echo xxx | tr “a” “b” 将内容中的a替换为b,短补充、长截取
    • tr “a-z” “A-Z” 小写集合内替换为大写集合内对应的字符
      • echo 12345 | tr “0-9” “9876543210” -> 87654
      • 第二个集合不能为空串
      • 类似 tr “[:lower:]” “[:upper:]”
    • tr -d " \n" 删除空格、\n
    • tr -d -c “0-9” 删除集合以外的字符
  • 算术运算

    • let result=a+b; let a++;
    • result=$[a+b]
    • result=$((a+b))
    • expr 声明表达式,使用let继续运算
    • echo “2*0.5” |bc 浮点数运算
    • echo “scale=2;5/6”|bc 保留两位小数
    • echo “obase=2;$num”|bc 转二进制
    • echo “sqrt(100)”|bc
    • echo “2^3”|bc
  • 文件描述符

    • 与已打开文件或者数据流相关的整数,是访问文件的指针;
    • 0 标准输入 ;1 标准输出; 2标准错误输出 -->系统预留
    • echo “hello world” > out.txt标准输出重定向
    • echo “xxxx” >> out.txt 标准输出追加重定向
    • ls + 2>error.txt 1>log.txt 标准错误重定向与标准输出重定向
    • ls + >log.txt 2>&1 标准错误 重定向到标准输出
    • ls + 2>/dev/null 丢弃标准错误
    • tee重定向到文件,并交给管道; echo xx | tee -a out.txt | cat - file.txt
    • cmd < file 文件内容重定向到命令
    • cat << EOF>log.txt 将脚本中当前位置到"EOF"位置之间的内容重定向到文件中
    • 自定义文件描述符,exec 3<file 读取;exec 4>file 写入;exec 5>>file; echo xxxx >&4 写入;
  • 文件校验和

    • md5sum file1 file2 … >xxx.md5 生产对应文件的校验和
    • md5sum -c xxx.md5 校验文件是否损坏
    • 案例,找个当前目录下的所有的C文件,生成校验和,并追加到c.md5文件
      • find . -type f -name "*.c" -print0 |xargs -0 md5sum >> c.md5
  • 排序

    • sort 排序, 常结合uniq一起使用
    • sort -n file.txt 数字方式排序【默认第一列】
    • sort -k 2 file.txt 指定列排序
    • sort -r file.txt 逆序排序
    • sort -d file.txt 字典序排序
    • sort -u file.txt 排序后去重 -b 忽略前导空白符
    • cat file.txt | sort -k 3 | uniq -c 去重并统计重复的行数
    • uniq -d 找出重复的行; -s 2 跳过指定字符数;-w 2 判断重复时比较的最多字符数; -z 以\0作为定界符
  • find 递归查找文件

    • linux系统中一切皆文件;
    • 文件的类型,f 普通文件、d目录、l 链接文件、c字符设备、b块设备、s套接字
    • 使用 find ./ -maxdepth 3 -type f -name “*.txt” -print
      • -maxdepth 递归查找的最大深度
      • -mindepth 最小深度
      • -type 文件类型
      • -name 匹配名称; ! -name条件否定
      • -iname 忽略大小写匹配名称
      • -path 匹配整个文件路径
      • -regex 简单正则匹配整个路径 find ./ -type f -regex “.*seq.*” -print;字母不开头
      • -atime 最近一次访问时间,天
      • -mtime 文件内容最近一次修改时间,天
      • -ctime 文件元数据最近一次修改时间,天
      • -amin、-mmin、-cmin 分钟
      • find . -type f -name “*.c” -atime 7 等于7天
      • find . -type f -name “*.c” -atime +7 大于7天
      • find . -type f -name “*.c” -atime -7 小于7天
      • -size 20k、 大于+20k、 小于 -20k 根据大小查找 M G c字节 b 块(512bytes)
      • -perm 644 根据权限查找
      • -print 打印输出
      • -print0 以 \0 作为定界符
      • -delete 删除查询结果
      • -exec 执行操作,只能一个命令,多个命令放入sh脚本
        • find . -maxdepth 2 -type f -user lauf -name “*.txt” -exec chmod u+x {} \;
        • 删除多个目录,find . -type d -name “*pycache*” -exec rm -rf {} \; 也通过xargs 转为命令行参数进行删除;
        • 解析,大括号{}替换为每个文件,\; 必须是一个反斜杠+分号
        • -exec cat {} \; >out.log
        • -exec cp {} target_dir \;
        • -exec ./lauf.sh {} \;
      • -prune裁剪 跳过指定的目录 find . \(-name “dir" -prune \) -o \(-type f -path ".c” -print \)
  • 命令行参数

    • 使用xargs 将输入内容转为命令行参数(一行),传给一个命令

    • echo -e “jack\n tom\n lucy” | xargs 默认的定界符为 空格,-d 指定定界符

      • [laufing@centos ~]$ echo “jack,tom,lucy” |xargs -d ,
        jack tom lucy
    • echo -e “jack\n tom\n lucy” | xargs -n 2 ./lauf.sh 转为两个参数,依次传给脚本

    • xargs -I {} ./lauf.sh -p {} 替换传参

    • find . -type f -name “*.py” -print0 | xargs -0 rm -f 删除每个文件

    • find . -type f -name “*.py” -print0 | xargs -0 wc -l 统计每个文件行数

      • 5 ./lauf.sh
  • 修改文件权限

    • chmod u=rwx g=r o=r lauf.sh
      • u 当前用户
      • g 文件所属用户组
      • o 其他用户
      • a 所有用户
    • chmod a+x lauf.sh 所有用户添加可执行权限
    • chmod u-wx lauf.sh 当前用户去除写、可执行权限
    • ls -la 列出所有的文件及信息
      • -rw-rw-r–. 1 laufing laufing 3 Sep 13 06:36 c1.c
        -rw-rw-r–. 1 laufing laufing 3 Sep 13 06:36 c2.c
        -rw-rw-r–. 1 laufing laufing 82 Sep 13 06:44 c.md5
        drwxr-xr-x. 2 laufing laufing 72 Mar 25 03:32 Desktop
        drwxr-xr-x. 2 laufing laufing 6 Mar 25 01:56 Documents
      • 三组权限u g o、软连接数、用户、用户组、大小bytes、时间、文件名
  • 用户组相关命令

    • groups 查看当前用户的所有组;
    • id 查看当前用户的UID、组等信息
    • id jack 查看指定用户的UID、组等信息
    • cat /etc/group # 查看系统中的所有的组列表(组名:密码占位符:GID:成员列表)
    • sudo groupadd -g 1005 g_name 添加一个组,并指定 GID 【非必须】
    • sudo groupdel groupname 删除组
    • sudo groupmod -n new_name old_name # 修改组名
    • sudo groupmod -g new_gid old_gid 修改组的GID
    • sudo usermod -aG gname username;-a: append (追加), -G: Groups (附属组) 如果不加 -a,用户原有的其他附属组会被清空!
    • sudo usermod -aG wheel username;将用户加入 wheel 组(CentOS/RHEL)或 sudo 组(Ubuntu/Debian)操作免sudo

变量

  • 普通变量
    • 声明变量,直接赋值,同python
    • =两边不能有空格
    • ‘’ 单引号表示纯字符
    • “”双引号表示一个整体
    • ``反引号表示操作命令
    • 末尾没有;号
    • 变量的值均为字符串
    • 使用$变量 获取值
    • ${#变量} 获取字符串值的长度
# 直接赋值,name='jack'# 纯字符pyCode='import os\nimport csv\n xxxx'# -e 识别转义字符,输出到文件中echo-e$pyCode>content.txt# $符引用变量的值state="name is jack, current dir$(pwd)"# 必须带括号echo-e$state>>content.txt
  • 环境变量
    • 配置环境变量,以使linux操作系统可以使用。
    • 当前用户下的环境变量
# 编辑文件vim~/.bashrc# 配置环境变量exportPATH=$PATH:/home/xxx/pyexportLD_LIBRARY_PATH=XXXX# 保存后,使用变量生效source~/.bashrc
  • 全局的环境变量
# editvim/etc/profile# configexportPATH=$PATH:/home/xxx/py# enablesource/etc/profile
  • 命令行变量
    • shell 脚本命令行
    • 函数的参数
# 执行shell脚本,传参$shlaufing.sh param1 param2# 脚本中使用$1 $2 ....$9..${10}# 获取参数个数 $## 获取所有的参数 $* / $@# $?上一条指令的执行结果 0表示成功# 定义函数 类jsfunctionfunc(){echo$1echo$2}# 执行函数func param1 param2

分支

  • test xxx,表示测试条件,成功返回true
  • 数值比较
    • -eq 等于
    • -gt 大于
    • -lt 小于
    • -ge 大于等于
    • -le 小于等于
  • 字符串比较
    • = or == 相同
    • != 不同
    • -z 长度为0 返回true
    • -n 长度非0 返回true
  • 文化目录的判断
    • -e 文件或者目录是否存在
    • -f 存在且为文件
    • -d 存在且为目录
    • -r 文件存在且可读
    • -w 文件存在且可写
    • -x 可执行
# test判断语句 可避免多层括号iftest5-gt3;thenecho"true"fi# 结束# [] 表示 数值 测试语句,必须有空格# [[ ]] 字符串 测试语句 必有空格if[[$1='']];thenecho"no params"elif[[$1='lauf']]||[[$1='tom']];thenecho"lauf or tom params"elseecho"other params"fi# 简化判断 上个指令执行成功时,才进入指定目录[$?-eq0]&&cdlauf

&& || 连接多个测试条件,
! 条件内部取反

循环

# 循环 数值序列, 闭区间foriin{1..5};doecho$idone# 遍历字符串IFS=";"# 设置内部字段分隔符foriin"jack;lucy;lili"doecho$i# jack lucy lili 整体done# 变量目录下的文件curDir=`ls$(pwd)`# 数组foriin$curDir# 引用数组doecho$idone# 通配符 匹配结果foriin*.jpg *.png;# 1 2 3 数组doecho$idone

函数

shell定义函数特别简单,类似js。

functionfunc1(){echo$1# 打印第一个参数echo$## 总参数个数echo$@# 所有参数数组 可循环遍历}func2(){echo"func2"}# 函数调用,并传参func1"tom"4

函数案例

递归实现每个目录下添加文件。

创建lauf.sh脚本

#!/bin/bashfunctionaddFile(){if[-d$1];thenecho"add file for$1"touch"$1/lauf.txt"# recursivedealDir$(pwd)/$1fi}functiondealDir(){# need absolute pathcd$1curFiles=`ls$1`foriin$curFiles;doaddFile$idone}# sh lauf.sh /home/laufing/aadealDir$1

下一篇:linux shell操作- 02 常用命令及案例;

http://www.jsqmd.com/news/710500/

相关文章:

  • 从GEO数据到发表级图表:一个完整的炎症性肠病(UC)差异分析实战,含logFC手动计算与可视化
  • 告别游戏崩溃:AML启动器打造XCOM 2模组管理新体验
  • 学术论文审稿回复中的心智理论与AI应用
  • 裸机编程不可逆趋势(2024边缘AI推理节点白皮书核心结论首次公开)
  • 抖音批量下载完整指南:如何快速掌握高效下载技巧
  • YOLOv5-Face人脸检测终极指南:从零开始的高精度实时解决方案
  • RAG系统重排序技术:提升信息检索精度的关键方法
  • 终极指南:10个React Router技巧打造高效订单跟踪路由管理系统
  • 2026年AI应用开发全攻略:超全生态地图+工具链解析!开发者/产品人/AI从业者必备
  • Steamdeck 游戏提示c++ runtime错误
  • 革命性AI开发环境工具envd:10分钟打造可复现的深度学习环境
  • 纯真社区版 IP 库:IP归属地获取方式
  • 别再只会用Photoshop调对比度了!用Python+OpenCV灰度拉伸,5分钟搞定低对比度/过曝照片修复
  • MCP协议实战:构建政治信息洞察AI智能体服务器
  • 终极指南:如何用开源工具PvZ Toolkit轻松修改植物大战僵尸游戏体验
  • 10分钟掌握正则表达式:从入门到精通的完整指南
  • Deep-Live-Cam部署教程:搭建实时换脸系统
  • 终极Vim单元测试指南:从入门到精通的完整框架使用教程
  • ethercat_driver_ros2 安装 EtherLab
  • 稀疏字典学习在大语言模型压缩中的应用与优化
  • 移动语义、右值引用和完美转发:C++性能优化的终极指南
  • DeepSeek-V4 深度解读:百万上下文背后的工程细节
  • AI视频换脸技术:原理、优化与实践指南
  • 3分钟学会Input Leap:免费开源跨平台设备共享解决方案
  • 雀魂AI助手Akagi:免费开源麻将分析工具,实时提升你的麻将水平
  • Akagi麻雀助手完整指南:如何用AI提升雀魂游戏水平
  • DSMC-Magus:为AI智能体构建外部大脑,解决长会话稳定性难题
  • 3个场景让Android自动化效率倍增:AutoTask智能任务管理实战指南
  • 从‘端点效应’到‘必要性探路’:一个高中数学老师的高观点解题笔记
  • E7Helper完整指南:24小时自动刷第七史诗,解放你的游戏时间