shell编程

本文围绕Linux Shell编程展开,介绍了使用shell编程的原因,如能快速简单完成编程。还提及shell变量以字符串存储,可通过$符号访问。此外,给出了新建文件写入字符串、命令循环执行、查看CPU线程等操作的示例,以及shell脚本错误处理和挂载硬盘等内容。

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

 shell脚本样例

总结常用的 34 个 Linux Shell 脚本_shell脚本 列表-优快云博客

使用shell进行程序设计的原因之一是。

你可以快速、简单地完成编程。

哲学:

Linux 具备自动文件类型处理功能,所以使用这些工具 的用户 

一般不必了解它们是用哪种语言编写的。

如果想要这些工具运行得更快,常见的做法是首先在shell中实现

工具的原型,一旦确定这么做,然后再用C或者C++、Perl或者

其他执行得更快的语言来重新实现它们。

如果 在shell中这些工具工作得已足够好,就不必再重新实现它们 。

变量:

在 shell里,变量是以字符串的形式存储,

你可以通过在变量名前加一个$符号来访问它的

内容。

使用引号:

一般情况下,脚本文件中的参数,以空白

文件系统

权限一般为 755

新建文件并写入字符串

方法一

echo -e "deb [arch=arm64]  http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ focal main \ndeb [arch=arm64]  http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/ focal main" |tee /etc/apt/sources.list.d/ros2.list

 方法二

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ong59qnk.mirror.aliyuncs.com"]
}
EOF

shell 自动发送

#!/bin/sh -e
while [ 1 ] 
do 
    cat /dev/ttyS3
    usleep 500000
done

shell 自动替换

sed -i 's/enforcing/permissive/g' /system/etc/selinux/config

shell 中命令循环执行

i=0; while true; do echo "zr $i"; i=$((i+1)); sleep 3; done

查看当前cpu线程

NUM_CPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)

 getconf -a  //查看所有参数

 超链接与if判断

#!/bin/bash
board=$1

echo "#############################################"
echo "########### set board dts     #############"
echo "########### hd03047a hd06p6a ##############"
echo "#############################################"

if [ "$board" = "hd03047a" ]; then
    ln -s hd03047a_nm10.dts kernel/arch/arm64/boot/dts/cuser/nm10.dts
elif [ "$board" = "hd06p6a" ]; then
    ln -s hd06p6a_nm10.dts kernel/arch/arm64/boot/dts/cuser/nm10.dts
else
    echo "unknow board $board"
    exit 0
fi
echo "###############set finish###################"

输出字符串至指定行

linux中 echo添加多行内容到从倒数第二行开始_香奈儿的技术博客_51CTO博客

 在文件后添加字符串

 function enable_core_dump() {
     echo "enable core dump config"
     # 在/etc/security/limits.conf文件的"# End of file"之前加入内容
     {
     ¦   grep -v '^#' ./limits.conf # 排除注释行,获取所有配置行
     ¦   echo "admin hard core unlimited"
     ¦   echo "root hard core unlimited"
     ¦   echo "admin soft core unlimited"
     ¦   echo "root soft core unlimited"
     } | awk '
     /^# End of file/{print; exit} # 如果是"# End of file"行,则打印并退出
     { print }                     # 打印其他所有行
     ' | sudo tee ./limits.conf > /dev/null
 }

shell脚本错误处理

set -eE‌是Bash脚本中的一个选项,用于设置脚本的执行行为。具体来说,set -e表示如果任何命令执行失败(返回非零状态),脚本将立即退出;而set -E则表示如果任何命令执行失败,并且该命令是管道(pipe)的一部分,脚本也会立即退出。这两个选项通常一起使用,以确保在各种情况下都能及时处理错误

err_handler()
{
    ret=$?
    [ "$ret" -eq 0 ] && return

    echo "ERROR: Running ${FUNCNAME[1]} failed!"
    echo "ERROR: exit code $ret from line ${BASH_LINENO[0]}:"
    echo "    $BASH_COMMAND"
    exit $ret
}
#发生错误时的处理函数
trap 'err_handler' ERR
set -eE

shell脚本挂载硬盘

blkid字段

#!/bin/sh -e
#

if [ ! -d "/mnt/reserve"];then
    mkdir /mnt/reserve
else 
    echo "/mnt/reserve is mkdir"
fi

fs_format=$(blkid |grep "/dev/mmcblk2p5"|awk '/ext4/ {print $3}')
v1=$(echo $fs_format |cut -c7-10)
if [ "$v1" != "ext4" ]; then
    mkfs.ext4 /dev/mmcblk2p5
    echo "will mkfs.ext4 /dev/mmcblk2p5 and mount to /mnt/reserve"
    mount /dev/mmcblk2p5 /mnt/reserve
    chmod 777 /mnt/reserve -R
fi

v2=$(cat /etc/fstab |grep "/mnt/reserve"|awk '/ext4/ {print $2}')
if [ -z "$v2" ];then
    echo "will set /etc/fstab"
    file_count=$(blkid |grep "/dev/mmcblk2p5"|awk '/ext4/ {print $2}')
    v3=$(echo $file_count |sed -r 's/.*"(.+)".*/\1/')
    echo "UUID=$v3    /mnt/reserve  ext4    defaults,nofail    0  2" > /etc/fstab
    mount /dev/mmcblk2p5 /mnt/reserve
    chmod 777 /mnt/reserve -R
fi
exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值