对于init.rc启动shell脚本感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍init.rc执行shell,并为您提供关于20.1shell脚本介绍20.2shell脚本结构和执行20.3
对于init.rc启动 shell脚本感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍init.rc执行shell,并为您提供关于20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量、20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量、69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量、bash – 如何在shell脚本中启动程序并使shell脚本继续运行,即使程序保持打开状态的有用信息。
本文目录一览:- init.rc启动 shell脚本(init.rc执行shell)
- 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量
- 20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量
- 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
- bash – 如何在shell脚本中启动程序并使shell脚本继续运行,即使程序保持打开状态
init.rc启动 shell脚本(init.rc执行shell)
[Android] 在開機的時候,執行你想要的 shell script
http://www.jb51.cc/article/p-humxawbf-zd.html
雖然 init.rc 很好用,但還是有其缺陷... 像是我要 echo 某些字串到檔案時,他就做不到了 :(
所以可以搭配一個 .sh 的檔案,讓他開機的時候去執行這個 .sh 即可。
建議修改方式:
[1] 在AndroidBoard.mk 裡面將你的 .sh 包起去
file := $(TARGET_OUT)/etc/my.sh[2] 在你想要加進去的 init.rc 中加入下面這段:
ALL_PREBUILT += $(file)
$(file) : $(LOCAL_PATH)/ my.sh| $(ACP)
$(transform-prebuilt-to-target)
on boot
exec /system/bin/sh /system/etc/my.sh
這樣子就可以嚕 ^^ 裡面用粗體紅字的就是要注意的地方囉
Android::开机自动执行shell脚本
在应用程序启动之前,往往需要在Android启动过程中去对系统做一些设置,如修改某些文件夹的属主和文件的权限,本文实现在init.rc中调用shell脚本,而所有对系统资源的修改和配置都在此shell脚本中实现。
1、在system/core/rootdir/etc/init.djstava.sh脚本文件,以开机获取IP地址为例,脚本内容可如下 #! /system/bin/sh ifconfig eth0 192.168.18.200 netmask 255.255.255.0 up route add default gw 192.168.18.1 dev eth0
2、修改system/core/rootdir/Android.mk文件,增加语句 copy_from += etc/init.djstava.sh
3、修改device/$(硬件平台)/init.rc文件,增加语句 将 mount yaffs2 mtd@system /system ro remount 改为 mount yassf2 mtd@system /system rw remount chmod 755 /system/etc/init.djstava.sh chown root shell /system/etc/init.djstava.sh service eth0_set /system/etc/init.djstava.sh oneshot 4、设置dns,修改system/core/rootdir/init.rc,在setprop net.tcp.buffersize.gprs命令后增加如下语句 setprop net.dns1 211.167.97.67 setprop net.dns2 202.96.209.133
[init.rc] android开机过程执行shell脚本
1、在system/core/rootdir/etc/下添加脚本文件,命名为myshell.sh,脚本内容可如下#! /system/bin/sh
copy_from += etc/myshell.sh
3、修改相应的init.rc文件,增加语句
将mount yaffs2 mtd@system /system ro remount 改为
mount yassf2 mtd@system /system rw remount
//以下的内容一定不要乱放,一定把它们放在跟它们类似的命令旁边,如service就放在最后。
chmod 755 /system/etc/myshell.shchown root shell /system/etc/myshell.sh
service myshell /system/etc/myshell.sh
oneshot
init脚本的关键字可以参考init进程的system/core/init/keyword.h文件。
init.rc的使用方法,可以参考说明文件system/core/init/readme.txt
详细的讲解就参考:http://blog.csdn.net/magicyu2/article/details/5392524
如果想要修改启动过程只需要修改init.c(system/core/init)或者init.rc里的内容即可.
参考:
http://www.eoeandroid.com/thread-165459-1-1.html
http://www.cnblogs.com/perseus/archive/2012/03/19/2405503.html
Android pppd_gprs脚本启动过程
http://blog.zol.com.cn/4473/article_4472516.html
20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量
20.1 shell脚本介绍
shell 是一种脚本语言;和传统的开发语言比较,会比较简单
shell有自己的语法;可以使用逻辑判断、循环等语法
可以自定义函数
定义函数的目的,就是为了减少重复代码
shell是系统命令的集合
shell脚本可以实现自动化运维,能打打的增加我们的运维效率
20.2 shell脚本结构和执行
开头需要加#!/bin/bahs //告诉系统,这个脚本是通过哪一个解释器来进行操作的
以#开头的行作为解释说明
脚本的名字以.sh结尾,用于区分这是一一个shell脚本
执行方法有两种:
chmod +x 1.sh; ./1.sh
bash 1.sh
查看脚本执行过程
bash -x 1.sh
[root@aminglinux-02 shell]# sh -x 01.sh
+ echo 123 //表示运行的命令
123
+ w
13:34:49 up 3:11, 1 user, load average: 0.16, 0.06, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.133.1 10:23 1.00s 0.07s 0.01s w
+ ls
01.sh
查看脚本是否有语法错误
bash -n 1.sh
没有输出,表示没有错误
修改一下文件测试一下错误
#!/bin/bahs
echo "123"
w
ls
for i in `seq 1 10`
do
echo $i
don
[root@aminglinux-02 shell]# sh -n 01.sh
01.sh:行9: 语法错误: 未预期的文件结尾
20.3 date命令用法
date 在shell中用处非常大;对文件后缀增加一个时间,以便后期管理
date +%Y-%m-%d, date+%y-%m-d 年月日
[root@aminglinux-02 shell]# date +%Y
2017 //四位的年
[root@aminglinux-02 shell]# date +%y
17 //二位的年
[root@aminglinux-02 shell]# date +%m
09 //月
[root@aminglinux-02 shell]# date +%M
52 //分
[root@aminglinux-02 shell]# date +%h
9月 //中文显示,或因为显示
[root@aminglinux-02 shell]# date +%H
13 //时
[root@aminglinux-02 shell]# date +%d
12 //日
[root@aminglinux-02 shell]# date +%S
47 //秒
[root@aminglinux-02 shell]# date +%F
2017-09-12
[root@aminglinux-02 shell]# date +%T
15:21:29
date +%H:%M:%S 等同于 date +%T 时间
[root@aminglinux-02 shell]# date +%H:%M:%S
15:23:18
[root@aminglinux-02 shell]# date +%D
09/12/17 //月日年
时间戳
[root@aminglinux-02 shell]# date +%s
1505200715 //距离1970总共过去多少秒
具体时间换算成时间戳
[root@aminglinux-02 shell]# date -d @1505200715
2017年 09月 12日 星期二 15:18:35 CST
date +%w星期几;date +%W 本年的第几个星期
cal 以日历形式显示
[root@aminglinux-02 shell]# cal
九月 2017
日 一 二 三 四 五 六
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
date -d "+1 day" +%F 一天后
date -d "-1 day" +%F一天前
date -d "-1 month" +%F一个月前
date -d "-1 min " +%F一分钟前
date -d "-1 year " +%F 一年前
20.4 shell脚本中的变量
• 当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
• 使用条件语句时,常使用变量
if [ $a -gt 1 ]; then ... ; fi
• 引用某个命令的结果时,用变量替代
n=`wc -l 1.txt`
• 写和用户交互的脚本时,变量也是必不可少的
read -p "Input a number: " n; echo $n
如果没写这个n,可以直接使用$REPLY
• 内置变量
$0, $1, $2…
$0表示脚本本身,$1 第一个参数,$2 第二个 .... $#表示参数个数
• 数学运算
a=1;b=2; c=$(($a+$b))
或者
$[$a+$b]
20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量
20.1 Shell脚本介绍
1. shell是一种脚本语言 aming_linux blog.lishiming.net
2. 可以使用逻辑判断、循环等语法
3. 可以自定义函数
4. shell是系统命令的集合
5. shell脚本可以实现自动化运维,能大大增加我们的运维效率
20.2Shell脚本结构和执行
开头(首行)需要加: #!/bin/bash
2. 以#开头的行作为解释说明:
3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本
4. 执行.sh脚本方法有两种:
1) 先给脚本添加x权限[root@hao-01 ~]# chmod +x 1.sh
脚本的绝对路径回车:
/root/
2) bash(bash=sh)执行脚本:
bash1.sh
5.查看执行过程sh -x 1.sh
6.检测是否有语法错误?
sh -n1.sh
20.3date命令用法
1. 查看当前时间 date
2.
年:
date +%Y
%y
月:
%m
分钟:
%M
日期:
[root@hao-01 ~]# %d
月日年:
%D
年月日
%Y%m%d
年-月-日:
%F
小时:
%H
秒:
%s
时间戳(距离1970年1月1日零点零分到现在有多少秒):
%s
时:分钟:秒:
%H:%M%s
%T
周(星期几):
%w
今年第几周(第几个星期):
%W
显示日历:
cal
前一天(昨天):
date -d "-1 day" +%F
上个月:
-1 month前一年(去年):
-1 years前一小时:
-1 hour前一分钟:
-1 min" +%F
时间戳(当前时间到1970年1月1日零点零分有多少秒):
%s
通过时间戳,翻译成日期时间date -d @1505206911
,转换成date +%s -d "2017-09-12 17:01:51"
20.4Shell脚本中的变量
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
使用条件语句时,常使用变量 if [ $a -gt 1 ]; then ... ; fi
3. 引用某个命令的结果时,用变量替代 n=`wc -l 1.txt`
4. 写和用户交互的脚本时,变量也是必不可少的read -p "Input a number: " n; echo $n 如果没写这个n,可以直接使用$REPLY
5. 内置变量 $0,$1,$2… $0表示脚本本身,$1 第一个参数,$2 第二个 .... $#表示参数个数
6. 数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]
69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
1、shell脚本介绍:
shell是一种脚本语言和传统的开发语言相比,会比较简单:
shell有自己语法,可以支持逻辑判断、循环等语法:
可以自定义函数,目的是减少重复的代码:
shell是系统命令的集合:
shell脚本可以实现自动化运维,能大大增加我们的运维效率:
2、shell脚本结构和执行:
开头需要加#!bin/bash
#号开头注释,解释说明:
脚本需要以.sh结尾,用以区分是shell脚本:
执行的方法有两种:
chmod +x 1.sh ; sh 1.sh
bash 1.sh
查看脚本的执行过程: sh -x 1.sh
查看脚本的是否语法错误: sh -n 1.sh
3、shell脚本操作:
创建一个shell目录,用于写shell脚本: mkdir shell ; cd shell
#!bin/bash 第一行必须要这样写,固定的格式,表示在当前机器上用什么命令去执行这个脚本:
[root@localhost_02 shell]# cat 1.sh
#!/bin/bash
echo "123"
w
ls
执行脚本: sh 1.sh
[root@localhost_02 shell]# sh 1.sh
123
14:47:01 up 1:28, 1 user, load average: 0.03, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.149.135 13:20 5.00s 0.04s 0.00s w
1.sh :q!
注释:在当前机器上,不加"#!/bin/bash"也是可以执行的,得到的结果也相同,说明机器可以识别到每一条命令,但是换一台机器就不一定能可以执行。
通常指定"#!/bin/bash"后,接下来要运行的这些命令是通过哪一个解释器来操作的,通常都是/bin/bash这个解释器来执行的,它的作用都在于此:
3:通过给文件一个执行权限: chmod a+x 1.sh
执行./1.sh ,说明它的这行命令已经解析,被bin/bash认识了:
[root@localhost_02 shell]# chmod a+x 1.sh
[root@localhost_02 shell]# ./1.sh
123
14:50:13 up 1:31, 1 user, load average: 0.01, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.149.135 13:20 5.00s 0.05s 0.00s /bin/bash ./1.sh
1.sh :q!
其实/bin/bash和bin/sh是同一个文件: 连接文件:
[root@localhost_02 shell]# ls -l /bin/bash
-rwxr-xr-x. 1 root root 960472 8月 3 2017 /bin/bash
[root@localhost_02 shell]# ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 5月 31 22:04 /bin/sh -> bash
若没有/bin/sh这个文件:则可以使用/bin/bash这个命令来执行:
[root@localhost_02 shell]# /bin/bash 1.sh
123
14:53:19 up 1:34, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.149.135 13:20 7.00s 0.09s 0.03s w
1.sh :q!
注释:若以"#"开头的则表示解释说明,在脚本中第二行开始开头的:
脚本一般都是以sh结尾的,用于区分是shell脚本,如若没有,则需要查看这个文件才能知道是shell脚本:
shell有两种执行方式:
1) sh 1.sh 运行shell脚本:
2) chmod a+x 1.sh 先给脚本添加一个执行权限,
然后 ./1.sh 来执行.
这里的 ./ 是一个相对路径的目录,表示当前目录:
也可以使用绝对路径来执行: /root/shell/1.sh #其实就是找到这个文件再执行:
[root@localhost_02 shell]# /root/shell/1.sh
123
15:04:11 up 1:45, 1 user, load average: 0.01, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.149.135 13:20 3.00s 0.07s 0.01s w
1.sh :q!
查看脚本的执行过程: 注释:每一个加号,则表示一个操作步骤:
sh -x 1.sh 或者 /bin/bash -x 1.sh
[root@localhost_02 shell]# sh -x 1.sh
+ echo 123
123
+ w
15:06:37 up 1:47, 1 user, load average: 0.02, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.149.135 13:20 5.00s 0.06s 0.00s sh -x 1.sh
+ ls
1.sh :q!
查看脚本是否有错误: 注释:若没有错误,则不会有任何的输出:
sh -n 1.sh
[root@localhost_02 shell]# sh -n 1.sh
2、data 命令语法: 一般用法前面需要"+"号:
%y-%m-%d ==== 年 月 日
%H:%M:%S ==== 小时 分钟 秒
小s:表示时间戳: | 大S:表示秒:
date +%Y-%m-%d 表示年月日(大Y表示四位的年):
date +%y-%m-%d 表示年月日(小y表示两位的年):
date +%s 表示时间戳:(距离1970年过去了多少秒):
date -d @1537515069 (数字是时间戳显示出来的数字): 显示出来的也是当前日期:
date -d "+1 day" 表示一天前:
date -d "-1 day" 表示一天后:
date -d "+1 month" 表示一月前:
date -d "-1 month" 表示一月后:
date -d "+1 min" 表示一分钟前:
date -d "-1 min" 表示一分后:
date +%w 表示周几:
date +%W 表示一年的第几周:
date语法实践:
date 命令,会显示当前的系统的日期和时间:
[root@localhost_02 shell]# date
2018年 09月 21日 星期五 15:39:22 CST
date命令在shell中的作用非常大,一般用于对文件的后缀名增加一个时间:
1:表示年 月 日 date +%Y-%m-%d date +%y-%m-%d
[root@localhost_02 shell]# LANG=en_US.UTF-8 #设定字符集:
[root@localhost_02 shell]# date +%Y-%m-%d #表示年月日,四位的年:
2018-09-21
[root@localhost_02 shell]# date +%y-%m-%d #表示年月日,两位的年:
18-09-21
[root@localhost_02 shell]# date +%Y #表示四位的年:
2018
[root@localhost_02 shell]# date +%y #表示两位的年:
1
[root@localhost_02 shell]# date +%m # m 表示月份:
09
[root@localhost_02 shell]# date +%d # d 表示日期:
21
[root@localhost_02 shell]# date +%D # D 表示一种特殊格式的年月份:
09/21/18
[root@localhost_02 shell]# date +%F # 表示年月日的简写:
2018-09-21
[root@localhost_02 shell]# date +%Y%m%d #表示年月日,不加杆也可以的:
20180921
注释:其实x表示年月日的写法: data +%F === date +%Y-%m-%d === date +%D(特殊格式)
注释:在表示年月日的时候:默认是用" - "来区分的(如 date +%F), 不加也是可以的,如上例子:
2:时间单位(小时 分钟 秒 周末) #默认使用冒号分割:
[root@localhost_02 shell]# date +%T # T 表示简写的小时 分钟 秒:
15:53:08
[root@localhost_02 shell]# date +%H:%M:%S # 表示小时 分钟 秒:
15:54:30
[root@localhost_02 shell]# date +%H # H 表示小时:
15
[root@localhost_02 shell]# date +%M # M 表示分钟:
55
[root@localhost_02 shell]# date +%S # S 表示秒:
06
[root@localhost_02 shell]# date +%s #表示时间戳(距1970年过去了多少秒):
1537516549
[root@localhost_02 shell]# date +%w # w 表示周几:
5
[root@localhost_02 shell]# date +%W # W 表示今年的第几周:
38
注释:表示时间的方式: date +%T === date +%H:%M:%S
注释:表示日期的方式: date +%F === date +%Y-%m-%h
3、date还用来标记之前的日期:会用来标记日记(前一天的日期):
year month day hour min second week (后面的s可加可以不加):
用加减标记(" - "减号标记之前的日期) (" + "加号标记之后的日期)
day -1 "-1 year" #显示上一年的日期:
day -1 "-1 month" #显示上一个月的日期:
day +1 "+1 day" #显示明天的日期:
day +1 "+1 hour" #显示下一个小时的日期:
day +1 “+1 min” #显示下一个分钟的日期:
day +1 "+1 sec" #显示下一秒的日期:
[root@localhost_02 shell]# date -d "-1 year" #显示上一年的日期:
2017年 09月 22日 星期五 07:49:09 CST
[root@localhost_02 shell]# date -d "-1 month" #显示上一个月的日期:
2018年 08月 22日 星期三 07:49:16 CST
[root@localhost_02 shell]# date -d "-1 day" #显示昨天的日期:
2018年 09月 21日 星期五 07:49:20 CST
[root@localhost_02 shell]# date -d "+1 hour" #显示一小时后的日期:
2018年 09月 22日 星期六 08:49:28 CST
[root@localhost_02 shell]# date -d "+1 min" #显示一分钟后的日期:
2018年 09月 22日 星期六 07:50:32 CST
[root@localhost_02 shell]# date -d "+1 sec" #显示一秒后的日期:
2018年 09月 22日 星期六 07:49:37 CST
[root@localhost_02 shell]# date -d "+1 week" #显示一周后的日期:
2018年 09月 29日 星期六 07:49:40 CST
4、时间戳: date +%s date -d @时间戳
date +%s 表示显示出时间戳
[root@localhost_02 shell]# date +%s
1537574033
[root@localhost_02 shell]# date -d @1537574033 @后面跟的就是时间戳:
2018年 09月 22日 星期六 07:53:53 CST
注释:若想在linux系统中,把当前日期换算成时间戳,可以使用: date +%s -d"2018-09-22 07:56:53"
[root@localhost_02 shell]# date +%F-%T
2018-09-22-07:56:53
[root@localhost_02 shell]# date +%s -d"2018-09-22 07:56:53"
1537574213
5、在linux下还可以编辑日期: cal
[root@localhost_01 network-scripts]# cal
九月 2018
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
3、shell脚本中的变量:
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
使用条件语句时,常使用变量 if [ $a -gt 1 ]; then ... ; fi
引用某个命令的结果时,用变量替代 n=`wc -l 1.txt`
写和用户交互的脚本时,变量也是必不可少的 read -p "Input a number: " n ; echo $n 如果没写这个n,可以直接使用$REPLY
内置变量 $0, $1, $2… $0表示脚本本身,$1 第一个参数,$2 第二个 .... $#表示参数个数
数学运算 a=1 ; b=2 ; c=$(($a+$b)) 或者$[$a+$b]
bash – 如何在shell脚本中启动程序并使shell脚本继续运行,即使程序保持打开状态
例:
/path/to/foo /path/to/bar # not executed untill foo is done /path/to/foo & # in background /path/to/bar & # executes as soon as foo is started
阅读有关工作控制here和here的更多信息
今天的关于init.rc启动 shell脚本和init.rc执行shell的分享已经结束,谢谢您的关注,如果想了解更多关于20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量、20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量、69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量、bash – 如何在shell脚本中启动程序并使shell脚本继续运行,即使程序保持打开状态的相关知识,请在本站进行查询。
本文标签: