shell函数

收集整理的对#!bin/sh的认识

♀尐吖头ヾ 提交于 2019-12-03 14:14:28
第一次学shell编程,看的文章中说shell程序必须以"#!/bin/sh"开始,也就认为是这样了。 虽然知道在shell中以"#"开始的语句都是注释,但也从没认为"#!/bin/sh"也是注释,就像对C语言程序必须有main函数一样毫无怀疑。 但前些时候又听说"#!/bin/sh"也是注释,可有可无,当时觉得真是一个失败,连基本的语法都分不清。 前几天借了一本书,才真正认识了"#!/bin/sh"。 shell编程是以"#"为注释,但对"#!/bin/sh"却不是。 "#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在。 如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell。 比如:如果脚本被编写为在Korn Linux中运行,而默认运行shell脚本的为C shell csh,则上述脚本在执行过程中很可能失败。 所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。 来源: oschina 链接: https://my.oschina.net/u/781842/blog/119598

shell 版本号比较_用shell如何比较软件版本号的大小

雨燕双飞 提交于 2019-12-03 13:36:40
比如你想写个脚本来比较两个版本号 (如"1.2.30" 和"1.3.0")来辨认哪个版本是最新的,有可以比较两个版本号字符串的shell脚本吗? 当你写了一个shell脚本,想使用脚本来比较两个版本号,然后能区分哪个版本号更高哪个版本号更低。比如,你安装某个软件的时候,要求是版本号要大于1.3.0,想验证最低配置要求.又或者你想在shell脚本中写版本号判断(比如版本号如果介入1.0.0 ≤ 版本 ≤ 2.3.1). 如果你想通过shell来比较两个版本号字符串的话最简单的就是使用 sort 命令。加上参数"-V"后 sort命令就可以把文本中的版本号给排序出来(默认是递增的排序),然后你想倒叙排序的话那就使用参数"-rV"即可 . 下面我们就来看下在shell中怎么使用 sort命令来比较版本号吧 对于要比较版本号字符串的话,下面的这些使用了 sort命令的自定义 函数可能会派上用场. function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; } function version_le() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" == "$1"; } function version

Linux Shell学习简单小结

偶尔善良 提交于 2019-12-03 12:15:10
shell linux performance function file if-fi [cpp] view plain copy print ? #! /bin/bash # 删除文件 和 新建文件 file=readme function delFile(){ if [ -e ./$file ];then rm -f ./$file echo "del $file ..." fi } function addFile(){ if [ ! -f ./$file ];then touch $file echo "add $file ..." fi } delFile addFile #! /bin/bash # 删除文件 和 新建文件 file=readme function delFile(){ if [ -e ./$file ];then rm -f ./$file echo "del $file ..." fi } function addFile(){ if [ ! -f ./$file ];then touch $file echo "add $file ..." fi } delFile addFile Result: (没有readme文件) [work shell]$ sh if_e.sh add readme ... [workshell]$ sh if_e.sh

shell 函数

和自甴很熟 提交于 2019-12-03 11:34:39
1.如何定义函数和调用函数 fun01 () { echo "Hello World"; } fun01 2.如何给函数传递一个参数 fun01 () { echo "Hello $1"; } fun01 SHell #执行时跟上一个固定的参数 fun01 $1 #执行时跟上一个不固定的参数 (脚本的位置参数,需要执行脚本时传递) 3.函数接收N多个参数传递 fun01 () { echo "Hello $*"; } fun01 liunx shell Python Test 4.函数传参 第一种方式 fun01 () { echo "Hello $1" } #脚本的位置参数 fun01 $1 需求1,写一个脚本,该脚本可以实现计算器的功能,可以进行 +- * / 四种计算。 例如: sh cal.sh 30 + 40 | sh cal.sh 30 - 40 | sh cal.sh 30 * 40 | sh cal.sh 30 / 40 [root@manager functions]# cat fun02.sh fun () { case $2 in +) echo $1 + $3 = $[ $1 + $3 ] ;; -) echo $1 - $3 = $[ $1 - $3 ] ;; x) echo $1 x $3 = $[ $1 * $3 ] ;; /) echo $1 /

'文件上传总结'

守給你的承諾、 提交于 2019-12-03 10:27:17
1. WebShell 1.1 什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。因为系统内核使我们不能直接操作的,shell就给我们提供了一个接口,通过shell我们可以把命令送入到内核。shell管理用户与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。 传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。 表示用户拥有的权限,不同的shell权限不同 1.2 WebShell 黑客在入侵了一个网站后,通常会留下一个asp或php后门文件与网站web服务器进行交互,得到一个命令执行环境,以达到控制网站服务器的目的。这个后门文件就是所谓的webshell。 2. 木马分类 2.1 一句话木马 一句话木马是Webshell的一种,由于这类Webshell代码比较少,往往只有一行代码,所以就被称为一句话木马。 一句话木马虽然代码简单,但是结合中国菜刀、蚁剑等WebShell管理工具,它们的功能却是非常的强大。 2.1.1 一句话木马工作原理 在PHP、ASP、ASPX中都有可以执行外部程序的函数,一句话木马就是通过这些函数来工作的,由页面传输待执行的命令,函数在远程执行命令。 PHP一句话木马 Copy 1

shell函数

易管家 提交于 2019-12-03 09:52:46
shell函数 为什么要使用shell函数 linux别的的作用 [root@lamp ~]# alias alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 设置别名与使用 [root@lamp ~]# alias cdone='cd /' [root@lamp ~]# alias alias cdone='cd /' alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show

9、大型程序的结构

蓝咒 提交于 2019-12-03 08:28:51
1、目录结构 目录: Flask程序一般保存在名为app的包中 migrations文件夹包含数据库迁移脚本 单元测试编写在test包中 venv文件夹包含python虚拟环境 文件: requirements.txt 列出来了所有依赖包,便于在其他电脑中重新生成相同的虚拟环境 config.py 存储配置 manage.py 用于启动程序以及其他的程序任务 2、配置选项 config.py 原先采用的是在hello.py中简单的字典状结构配置,现在使用层次结构的配置类 import os basedir = os.path.abspath(os.path.dirname(__file__)) class Config: SECRET_KEY = '123456' SQLALCHEMY_COMMIT_ON_TEARDOWN = True FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]' FLASKY_MAIL_SENDER = '*****@qq.com' FLASKY_ADMIN = '*****@qq.com' @staticmethod def init_app(app): pass class DevelopmentConfig(Config): DEBUG = True MAIL_SERVER = 'smtp.qq.com' MAIL

python subprocess模块

妖精的绣舞 提交于 2019-12-03 05:23:11
import subprocess # # 默认接受['程序名','参数']的列表;shell=True表示直接调用系统的shell来执行字符串参数 # print(subprocess.run('dir',shell=True)) # 执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。 # print(subprocess.call('dir',shell=True)) # 执行指定的命令,返回命令执行状态,其功能类似于os.system(cmd) # print(subprocess.check_call('dir',shell=True)) #执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(..., check=True)。 # print(subprocess.check_output('dir',shell=True)) #执行指定的命令,如果执行状态码为0则返回命令执行结果(二进制字节形式的),否则抛出异常。 # print(subprocess.getoutput('dir')) # 接收字符串格式的命令,执行命令并返回执行结果,其功能类似于os.popen(cmd).read()和commands.getoutput(cmd)。 # print(subprocess

星云精准测试对安卓底层驱动代码的测试案例分析

早过忘川 提交于 2019-12-03 04:12:42
Android原生底层驱动应用面极广,但一直没有很好的办法进行质量追踪。本文借助星云精准测试的高可靠性的测试技术手段,针对Android原生底层驱动进行分析、插桩、编译、采集数据、数据分析等,逐步讲解精准测试是如何实现android原生底层驱动的对接。 在本文中,我们可以清晰地查看到如何进行技术对接的每一步,比如如何使用星云精准测试进行代码插桩、实现测试用例与采集底层驱动运行代码的数据追溯、对最终采集的数据进行一系列分析等。 一、安卓源码精准测试流程概述 经分析android源码的编译主要依靠Android.bp为纽带连接起来;在编译时,只需要在想要编译的模块目录下执行mm命令即可自动的根据当前目录下的Android.bp文件对其所包含的模块进行编译。 主要流程大致为:先将ZOA通信库源码复制进去并加入某一层次的Android.bp中,再通过对包含所有Android.bp编译信息的ninja文件的解析可以得到Shell认可的插桩json文件,Shell通过json文件对对应目录的代码进行插桩,插桩完成后,把对ZOA通信库的引用加入该模块的Android.bp中再放入ZoaInstru.h头文件后就可以正常编译出插桩程序了。 二、对安卓源码进行精准测试的准备工具 1.安卓原生8.1.0系统源码,放于/data/source2/目录下 2.shell.tar.gz插桩工具包放于

星云精准测试对安卓底层驱动代码的测试案例分析

左心房为你撑大大i 提交于 2019-12-03 04:12:36
Android原生底层驱动应用面极广,但一直没有很好的办法进行质量追踪。本文借助星云精准测试的高可靠性的测试技术手段,针对Android原生底层驱动进行分析、插桩、编译、采集数据、数据分析等,逐步讲解精准测试是如何实现android原生底层驱动的对接。 在本文中,我们可以清晰地查看到如何进行技术对接的每一步,比如如何使用星云精准测试进行代码插桩、实现测试用例与采集底层驱动运行代码的数据追溯、对最终采集的数据进行一系列分析等。 一、安卓源码精准测试流程概述 经分析android源码的编译主要依靠Android.bp为纽带连接起来;在编译时,只需要在想要编译的模块目录下执行mm命令即可自动的根据当前目录下的Android.bp文件对其所包含的模块进行编译。 主要流程大致为:先将ZOA通信库源码复制进去并加入某一层次的Android.bp中,再通过对包含所有Android.bp编译信息的ninja文件的解析可以得到Shell认可的插桩json文件,Shell通过json文件对对应目录的代码进行插桩,插桩完成后,把对ZOA通信库的引用加入该模块的Android.bp中再放入ZoaInstru.h头文件后就可以正常编译出插桩程序了。 二、对安卓源码进行精准测试的准备工具 1.安卓原生8.1.0系统源码,放于/data/source2/目录下 2.shell.tar.gz插桩工具包放于