在Android中使用启动脚本init.rc,可以在系统的初始化中进行简单的 *** 作。
init.rc启动脚本路径:system/core/rootdir/init.rc
内容:
Commands:命令
Actions:动作
Triggers:触发条件
Services:服务
Options:选项
Properties:属性
Commands是一些基本 *** 作。如:
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
devwait /dev/block/mmcblk0p12
mount ext3 /dev/block/mmcblk0p
Action表示一系列命令,通常在Triggers中调用,如:
on init //表示一个触发条件
sysclktz 0
loglevel 3
# setup the global environment
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
Services通常表示启动一个可执行程序,Options是服务的附加内容,用于配合服务使用。
service vold /system/bin/vold //vold是服务名称,/system/bin/vold是所对应的可执行程序。
socket vold stream 0660 root mount //socket是配合服务使用的选项
ioprio be 2
service netd /system/bin/netd
socket netd stream 0660 root system
配合服务使用的选项有socket,user,group,oneshot。
oneshot表示该服务只启动一次,而如果没有oneshot选项,这个可执行程序将一直存在——如果可执行程序被杀死,则会重新启动。
Properties是系统中使用的一些值,可以进行设置和读写。
setprop ro.HIDDEN_APP_MEM 5120 //setprop用于设置属性
setprop ro.CONTENT_PROVIDER_MEM 5632
setprop ro.EMPTY_APP_MEM 6144
...
on property:ro.kernel.qemu=1 //on property用于判断属性
start adbd
这里的属性在整个android系统运行中都是一致的。
init脚本的关键字可以参考init进程中的system/core/init/keyword.h文件。如:
KEYWORD(chroot, COMMAND, 1, do_chroot) //chroot是命令,do_chroot()是调用的函数,这个函数在init进程中的system/core/init/builtins.c文件中定义。
要开机 运行只需将它加入到 rc.local ,一般为/etc/rc.d/rc.local 在其中加入以下行�¼.sh /path/to/test.sh使ç¨linuxå ¨å±åé$?å¯ä»¥ç¡®å®æ¯å¦æ§è¡ï¼å¦if [$? eq 0] theï¼echo "succeed!fiã
linuxä¸è®¾ç½®èªå¨å¯å¨å¯ä»¥ç¼è¾/etc/rc.d/rc.localæ件ï¼ä½¿ç¨vimå¨/etc/rc.d/rc.localæ·»å ä½ éè¦å¯å¨çå 容å³å¯ã
rc.localå¨å¨ç³»ç»å¯å¨åæ§è¡,å¨ç¨æ·ç»éåæ§è¡ãrc.localèæ¬æ¯ä¸ä¸ªå¨åè¿è¡çº§å«éå°rc.dç®å½çrc.localèæ¬ç软é¾æ¥ï¼ç¼å·æ大ï¼æ以被rcèæ¬æ§è¡æ¶å¨åè¿è¡çº§å«çåå§åæ«å°¾è¿è¡ã
å¨rc.localé设置æ¯ç³»ç»çº§å«èéç¨æ·çº§å«ï¼å 为å¯å¨èæ¬çåå§åä¸ç¨æ·æ å ³ï¼å¯å¨èæ¬åå§åå®æåï¼æè¿å ¥ç¨æ·ç»å½çé¢ï¼ãä¸ç¨æ·ç¸å ³ç设置shellçé ç½®æ件å¦ï¼ ~/.bash_profileã
2.4脚本语言的种类2.4.1 Shell脚本语言的种类
Shell脚本语言是弱类型语言(无需定义变量的类型就可使用),在Unix/Linux中主要有两大类Shell,一类是Bourne shell,另一类是C shell。
1. Bourne shell
Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三种类型。
Bourne shell (sh)由AT&T的Steve Bourne开发,是标准的UNIX Shell,很多UNIX系统都配有sh。
Korn shell (ksh)由David Korn开发,是Bourne shell(sh)的超集合,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上的/bin/sh往往是指向/bin/ksh的符号链接。
Bourne Again Shell即bash由GNU项目组开发,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版默认配置的Shell,在Linux系统上的/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多的不同,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,它们有些行为并不一致,但大多数企业运维的情况下区别不大,特殊场景可以使用bash替代sh。
2. C shell
C shell又包括csh、tcsh两种类型。
csh由Berkeley大学开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能,例如:作业控制、别名、系统算术、命令历史、命令行编辑等。
tcsh是csh的增强版,加入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。
以上介绍的这些Shell中,较为通用的是标准的Bourne shell (sh)和C shell (csh)。其中Bourne shell (sh)已经被Bourne Again shell (bash) 取代。
可通过以下命令查看CentOS7系统的Shell支持情况。
[root@oldboy ~]# cat /etc/shells
/bin/sh #<==这是Linux里常用的Shell,指向/bin/bash。
/bin/bash#<==这是Linux里常用的Shell,也是默认使用的Shell。
/usr/bin/sh
/usr/bin/bash
Linux系统中的主流Shell是bash,bash是由Bourne Shell(sh)发展而来的,但bash还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在sh上运行,如果你使用sh后发现结果和预期有差异,那么可以尝试使用bash替代sh。
内容来源:《跟老男孩学linux运维:Shell高级编程实战》第02章_Shell脚本初步入门
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)