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

嵌入式 - shell 常用语法简单总结

初步使用

#!bin/bash
echo "Hello world!"
echo
# shell
vim helloworld.sh
chmod u+x helloworld.sh
# 在当前bash运行
. helloworld.sh
source helloworld.sh
# 在子bash中运行,无法修改当前shell的变量
./helloworld.sh

Linux中工具链的配置

​ ~/.bashrc用于定义当前用户的Bash shell 环境参数。每次打开终端时该文件就会执行。在~/.bashrc中添加

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/ayuan/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
  • 别名
alias ll='ls -l' # 输入 ll 等效于 ls -l

变量

# 常用系统变量
echo $HOME; echo $PWD; echo $SHELL; echo $USER
# 定义变量时,=号前后不能有空格
# 全局变量定义,上层shell定义的全局变量下层可以查看修改,但是对上层没有影响
export ARM=arm

shell脚本中单引号和双引号的区别

echo "hello $name" # hello world
echo 'hello $name' # hello $name

参数

# 传入的参数个数
$#
# 传入的参数分别为
$0; $1; $2;
# 传入的所有参数,整体和分开
$*; $@;
# 最后一条命令的返回状态
$?
# 当前shell的进程ID
$$
  • 运算
A=$[1+2*3]

条件判断

if [ $1 -le $b ]
then
echo
elif
echo
fi
case $1 in
"1")
echo
;;
"2")
echo
;;
*)
echo
;;
esac
# 常用判断符号
-eq -lt -le -gt -ge -ne
-r -w -x
-e # 文件存在
-f # file
-d # dir
# 字符串比较
= !=
-z # 空串
-n # 非空串
# 逻辑
-a -o !

替换运算符

  • ${var_name:-def_Val}
    如果变量var_name存在且为非null,返回该变量的值,否则返回默认值def-Val
    注意var_name与:之间没有空格,:与-之间可以有空格。主要用途,如果变量未定义,则用默认值。
  • ${var_name:=val}
    如果变量var_name存在且为非null,返回该变量的值,否则,把val的值赋给变量var_name,并返回var_name的值val。
    注意var_name与:之间没有空格,:与=之间也不能有空格。
  • ${var_name:?message}
    如果变量var_name存在且为非null,返回该变量的值,否则返回该变量的名字var_name:提示信息meesage,并退出当前命令或脚本。
    注意var_name:之间没有空格,:?之间也不能有空格。
  • ${var_name:+val}
    如果变量var_name存在且为非null,返回val,否则返回null。
    注意var_name:之间没有空格,:+之间也不能有空格。
  • ${#val_name}
    返回变量长度。
  • $(())
    算术运算操作。
  • $((var1 opr var2))
    例如:$((5+1))只能是+-*/()运算符,并且只能做整数运算。
  • $()
    命令代换,类似于反引号(`), 例如:echo $(date)

循环

for i in $@
do
echo $i
done
#
for((i=1;i<=100;i++))
do
sum=$[$sum+$i]
done
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done

输入读取

read -t 5 -p "Enter name: " NN
echo NN

函数

# 系统函数
basename /home/atguigu/banzhang.txt
# banzhang.txt
basename /home/atguigu/banzhang.txt .txt
# banzhang
dirname /home/atguigu/banzhang.txt
# /home/atguigu
# 自定义函数
function sum()
{
s=0
s=$[$1+$2]
echo "$s"
}

正则表达式

# 开头
^
# 结尾
$
# 连续多个字符
a*
# 字符区间
[0-9]* [a-z]*
# 转义
\$

文本处理工具

# cut 提取列。-d分隔符;-f第几列
cut -d " " -f 1 file.txt
# awk 提取元素,提取 正则搜索 提取出的所有行的 以 : 分隔的 第七个 元素。
awk -F : '/正则搜索/{print $7}'
http://www.jsqmd.com/news/569266/

相关文章:

  • OFA模型在VMware虚拟机中的开发测试环境搭建
  • LFM2.5-1.2B-Thinking-GGUF部署教程:Ubuntu/CentOS/Debian三平台通用安装步骤
  • Pixel Aurora Engine从零开始:复古UI渲染与高对比度视觉系统搭建
  • 锦浪科技2025年净利8.65亿:储能毛利率突破30%,产品结构优化成效显著
  • 张家港全屋定制品牌哪家好?2026年3月推荐评测口碑对比顶尖五家 - 品牌推荐
  • Z-Image Atelier 生成动态效果预览:通过序列图像模拟简单动画过程
  • 懒人精灵Lua实战:手把手教你读写安卓手游内存(以libunity.so为例)
  • 利用快马平台快速构建高性能排序算法可视化原型,对比三种算法效率
  • 实战分享:用Sonic为政务播报制作数字人视频
  • 李慕婉-仙逆-造相Z-Turbo AI核心原理科普:如何用Transformer理解并生成人类语言
  • springboot+vue基于web的医院食堂订餐系统的设计与实现
  • 别再只会用8b/10b了!深入GTX/GTH的Elastic Buffer与64b/66b编码实战
  • 如何选择抗老精华?2026年3月推荐评测口碑对比知名五款 - 品牌推荐
  • 如何快速实现VRChat跨语言交流:革命性实时翻译工具实战指南
  • Enhancing LLM Reasoning with Knowledge Graphs: A Faithful and Interpretable Approach
  • Ostrakon-VL终端效果展示:支持语音指令‘扫描当前货架’触发摄像头任务
  • Ostrakon-VL-8B实战教程:终端API接口封装与外部系统对接
  • Pi0快速上手:上传三视图图像生成机器人动作教程
  • 忍者像素绘卷微信小程序接入:用户绘卷生成记录+时间轴回溯功能
  • chester·chen
  • 2025-2026年全球抗老精华评测:五款口碑产品推荐评价领先 - 品牌推荐
  • springboot+vue基于web的协同过滤算法的旅游攻略管理系统
  • 通义千问3-VL-Reranker-8B场景应用:内容推荐系统中的智能排序方案
  • 强!8.9K star 厉害! 一款轻量开源好用的AI自动化项目!
  • AnimateDiff入门指南:普通显卡也能流畅运行的AI视频工具
  • 2026年3月全球抗老精华推荐:TOP5口碑产品评测对比领先 - 品牌推荐
  • 小白也能懂:PyTorch 2.8深度学习镜像快速部署与CUDA环境验证
  • btcrecover实战指南:数字资产守护者 钱包密码与助记词恢复全攻略
  • WriteBack-RAG框架革新知识库,企业AI应用效果提升2.14%!
  • 引以为戒:一个“看不见”的空格,导致上下文超限——从 `llama-server` 错误说起