系统配置
1. shell 脚本
Shell 是一个应用程序,它提供了用户与操作系统内核之间的交互界面。通过shell,用户可以向操作系统发送命令,操作文件系统,运行程序,以及执行各种系统任务。Shell通常是一个命令行界面,用户可以在其中输入文本命令来执行各种任务。
常见的 Shell 有 sh、bash、csh、tcsh、ash 等。
sh(Bourne shell):sh是一种Unix和Linux操作系统中最常见的命令行解释器(shell)。它得名于其创建者Stephen Bourne,是最早的Unix shell之一。
Bash(Bourne-Again Shell):Bash是Unix和Linux系统中最常用的Shell。它是Bourne Shell的改进版本,提供了强大的脚本编程功能和丰富的命令行工具。
Dash:Dash是Debian Almquist Shell的缩写,通常用作系统初始化脚本的默认Shell。它在启动时非常快速,适用于系统引导和脚本任务。
Csh(C Shell)和Tcsh(Tenex C Shell):这些是C Shell的变种,主要在Unix系统中使用。它们具有与Bash不同的语法和功能。
Ash(Almquist Shell):Ash是另一种轻量级的Shell,通常用于嵌入式系统和一些轻量级Linux发行版。
2. 创建第一个脚本
打开文本编辑器,新建一个文本文件,并命名为 luckfox.sh,其中扩展名 sh 代表 shell,扩展名并不影响脚本执行。
创建脚本,在luckfox.sh 中输入代码:
#!/bin/sh
echo "Hello Luckfox !"- 第 1 行的
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的 /bin/sh 就是指明了解释器的具体位置 - 第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在
.sh
文件中使用命令与在终端直接输入命令的效果是一样的
- 第 1 行的
为脚本增加可执行权限并执行。
# vi test.sh
# chmod 775 test.sh
# ./test.sh
Hello Luckfox !
3. 自启动设置
在 /etc/init.d/ 中有相关的系统脚本。系统开机后,会先执行 rcS,在这个脚本里面,会循环去执行S开头脚本的start分支。系统关机时,会先执行 rcK,在这个脚本里面,也是循环去执行S开头的脚本的stop分支。所以如果我们需要添加一个脚本在开机时执行,可以按以下步骤操作:
需要在 /etc/init.d/ 目录里新建一个 S??* 的脚本。
- S:表示以S开头
- ??:表示中间是两个字符串,建议加两个数字表示优先级,数字越小开机时越先执行,关机时越后执行
- *:表示加任意字符串,用来描述脚本的功能
并且在脚本里实现 start 和 stop 分支。
给脚本添加权限,可以执行:
chmod 775 脚本名
#!/bin/sh
case $1 in
start)
echo "start"
;;
stop)
echo "stop"
;;
*)
exit 1
;;
esac提高系统自带的脚本优先级。
mv S99usb0config S90usb0config
mv S99_auto_reboot S90_auto_reboot例如,要将一个 LED 设置为开机后一直保持亮的状态,可以命名为 S99LED(确保该命名在系统脚本之后)。
#!/bin/sh
GPIO_PIN=55 # 设置GPIO引脚号
case $1 in
start)
echo "Starting..."
if [ ! -e /sys/class/gpio/gpio$GPIO_PIN ]; then
echo $GPIO_PIN > /sys/class/gpio/export
fi
echo out > /sys/class/gpio/gpio$GPIO_PIN/direction
echo 0 > /sys/class/gpio/gpio$GPIO_PIN/value
echo "Started."
;;
stop)
echo "Stopping..."
if [ -e /sys/class/gpio/gpio$GPIO_PIN ]; then
echo $GPIO_PIN > /sys/class/gpio/unexport
fi
echo "Stopped."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac- 使用变量 GPIO_PIN 来指定GPIO引脚号
- 在 start 操作中,使用条件语句检查 GPIO 引脚是否已经导出,避免重复导出
- 在 stop 操作中,使用条件语句检查 GPIO 引脚是否已经导出,避免重复卸载
- 对脚本参数的检查,以确保用户只能使用 start 或 stop 作为参数。如果用户提供其他参数,脚本将显示用法信息并退出
4. 设置静态 IP
如果想做一个简易的服务器,每次路由器分配的IP地址是随机的,想要设置一个静态 IP。注意静态 IP 地址:
- 静态IP地址与路由器网段一致
- 不要和路由器分配出去的 IP 地址发生冲突
#!/bin/sh
MAX_TRIES=10
TRIES=0
check_ip_address() {
if ifconfig eth0 | grep -q "inet "; then
return 0
else
return 1
fi
}
static_ip()
{
while [ $TRIES -lt $MAX_TRIES ]; do
if check_ip_address; then
echo "DHCP succeed!"
ifconfig eth0 192.168.10.66 netmask 255.255.252.0
route add default gw 192.168.11.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf
ifconfig eth0 up
break
else
echo "wait DHCP IP..."
TRIES=$((TRIES + 1))
sleep 5
fi
done
if [ $TRIES -eq $MAX_TRIES ]; then
echo "error"
fi
}
case $1 in
start)
echo "start"
static_ip
;;
stop)
echo "stop"
;;
*)
exit 1
;;
esac
- 在 ifconfig eth0 192.168.10.66 netmask 255.255.252.0 语句中要替换成自己的 IP 地址和子网掩码。
- 对于命令 route add default gw 192.168.11.1,请将网关地址更改为您自己的配置。如果不确定,请使用相关命令如 route -n 查看。