shell脚本命令行
㈠ Shell脚本
因为-c的意思是command,所以bash -c后面应该跟一个command。
shell运行脚本的两种方法:
1、bash xx.sh
2、bash -c "cmd string"
使用bash -c需要注意两点:
1、bash -c "cmd string"接的是shell命令字符串,用双引号括起来
2、bash -c "/path/to/file"接的是文件绝对路径,用双引号括起来,并且文件需要可执行权限
参考链接:
1.1、 linux shell -c,【bash】关于shell中 bash -c 执行命令或者可执行文件
1.2、 【bash】关于shell中 bash -c 执行命令或者可执行文件
示例:/usr/libexec/PlistBuddy -c "cmd string"
参考链接: XCode添加自定义Run Script Phase
由于PlistBuddy并不在Mac默认的Path里,所以我们得通过绝对路径来引用这个工具:
参考链接: PlistBuddy简单使用
㈡ shell脚本是什么
当执行命令或程序语句是通过程序文件而不是命令行,那这个程序被称为Shell脚本。如果Shell脚本内置很多命令、语句及循环控制,然后一次性执行完毕,这种通过文件执行脚本的方式称为非交互方式。用户可以在Shell脚本中输入一系列命令及命令语句组合。这些命令、变量和流程控制语句等有机地结合在一起,就形成一个功能强大的Shell脚本。
㈢ Shell基本脚本命令使用教程
1、本地变量:用户私有变量,只有本用户可以访问,保存在家目录的 .bash_profile、.bashrc文件中
2、全局变量:所有用户都可以使用,保存在 /etc/profile 文件中
3、用户自定义变量:用户自定义,比如脚本中的变量
定义变量格式: 变量名=值 (=两边不能有空格)
字符串用单引号或者双引号引起来
shell支持正则表达式的常见命令:grep、sed、awk。
sed 是一个行(流)编辑器,非交互式的对文件内容进行增删改查操作
awk 能够集过滤、提取、运算为一体,它的工作方式是读取数据,将每一行数据视为一条记录,每条记录以字段分隔符分成若干字段,然后输出各个字段的值。平行命令还有 gawk、pgawk、dgawk。
㈣ shell脚本如何传递给子脚本命令行参数
shell脚本如何传递给子脚本命令行参数
shell脚本可以使用getops来分析命令行参数,现在的一个使用场景是:
例如:
父脚本:
父脚本处理一个参数-t,如果-t的值是sub,那么调用sub.sh子脚本,然后把剩下的参数连同重写的-t参数传递给子脚本sub.sh。
子脚本:
子脚本的参数处理就没啥特殊的 了,和普通的脚本处理命令行参数一样。
运行例子:
限制:
㈤ shell脚本中的 exec 命令
exec执行命令时,不会启用新的shell进程。
source和 .也不会启用新的shell进程,在当前shell中执行,设定的局部变量在执行完命令后仍然有效。
bash或sh执行时,会另起一个子shell进程,其继承父shell进程的环境变量,其子shell进程的变量执行完后不影响父shell进程。
exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。
例如在当前shell中执行 exec ls 表示执行ls这条命令来替换当前的shell ,即为执行完后会退出当前shell。
为了避免父shell被退出,一般将exec命令放到一个子shell脚本中,在父sehll中调用这个子shell脚本,调用处可以用bash xx.sh(xx.sh为存放exec命令的脚本),这样会为xx.sh建立一个子shell去执行,当执行exec后该子shell进程就被替换成相应的exec的命令。
其中有一个例外:当exec命令对文件描述符操作的时候,就不会替换shell,而是操作完成后还会继续执行后面的命令!
文件描述符
shell中描述符一共有12个
0 代表标准输入
1 代表标准输出
2 错误输出
其他 3-9 都是空白描述符
其含义是: 复制标准输出到3 ,错误输出到 4 ,把 3 4 保存在bash.log 这个文件中。
其含义是:将bash.sh脚本执行的标准输出和错误输出追加重定向到 bash.log
如果exec 跟的是其他命令,则其他命令结束后,本shell也随之停止
可以看到随着 echo " hello oracle" 这条指令运行完本 整个脚本执行完毕,后面的 echo " hello db2" 没有执行!
二、Linux shell 脚本中, $@ 和 $@ 分别是什么意思?
$@ 表示所有脚本参数的内容
$# 表示返回所有脚本参数的个数
示例:编写如下shell脚本,保存为test.sh
说明:给脚本提供了两个参数,所以 @代表了参数的内容!
怎么理解shell脚本中 exec "`dirname "$0"`/node""$0" "$@" ?
$0 #脚本自己的路径
"`dirname "$0"`"/node #脚本目录下的node程序的路径
$@ #脚本被执行时的命令行参数
合起来就是:用脚本目录下的node程序来解释这个脚本本身
exec scala "$0" "$@" 是什么意思
这是bash语法。
$0 #表示当前脚本的名字
$@ #表示当前脚本执行的所有参数
exec scala "$0" "$@" #表示用scala命令,带参数,执行当前脚本
$0 是位置参数,表示脚本名称
$1 表示脚本的第一个参数,依次类推直到 $9
exec用于执行命令、或脚本、或外部可执行程序,会新建一个shell去执行
综上,这里exec sh "$0" 就是执行脚本本身
所以,就是一个循环过程,每隔两秒打印一次 Hello
㈥ 如何在shell脚本中执行系统命令 小小知识站
方法一:切换到shell脚本所在的目录(此时,称为目录)执行shell脚本:码码如下:cd /data/shell./hello.sh./的意思是说在当前的目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误。因为目前的目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。方法二:以绝对路径的方式去执行bash shell脚本:码码如下:/data/shell/hello.sh方法三:直接使用bash 或sh 来执行bash shell脚本:码码如下:cd /data/shellbash hello.sh或码码如下:cd /data/shellsh hello.sh注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊,呵呵……。方法四:在当前的shell环境中执行bash shell脚本:码码如下:cd /data/shell. hello.sh或码码如下:cd /data/shellsource hello.sh前三种方行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。
㈦ shell脚本
Shell脚本基本知识
概述:shell其实是内核与用户之间的一个接口,
shell脚本
如果有一系列经常使用的linux命令,你可以把它们存储在一个文件肿。shenll可以读取这个文件,并执行其中的命令。这样的文件成为脚本文件。
执行shell脚本
要创建一个shell脚本,你要使用任何编辑器比如vi在文本文件中编写他。
为了使用bashshell赖执行脚本magic,其命令是:bashmagic或者./magic
echo命令:
echo“!”
屏幕上就会回显“!”
#符号
用于在shell脚本肿可以包含注解入口
echo“hello”
#thisisacommentline.thiswouldnotproceanyoutput!
echo“world!”
第二行是一个注解的例子。它将被shell忽略,而且不产生任何消息
变量:
可以在任何时间通过简单的赋值来创建。
语法:
<variablename>-<value>
Linux中的所有变量都被当作字符串
引用变量:
$符号用于引用一个变量的内容
variable1=${variable2}
读入值给变量
在执行shell脚本时,shell还允许用户直接从键盘读入一个值给变量,还可以使用read命令来作。
$readfname
本地和全局shell变量
局部变量
当引用shell时,只有创建它的shell能够知道变量的存在
全局变量
称为子shell
shell中创建的变量局部于创建它的shell,除非使用export命令特别指出是全局的。
环境变量:
通过改变这些变量的值,用户能够定制此环境
一些环境变量的例子是HOME,PATH,PS1,PS2,LOGNAME,SHLVL,及SHELL
HOME变量
Linux系统中的每个用户都有一个相关的称作HOME的目录
当一个用户登录后,进入相应的HOME的目录
$echo$HOME
PATH变量
包含一列用冒号定界的目录的路径名字,便于可执行程序的搜索。
PS1变量
PS1(PromptString1)变量包含了shell提示符,$符号
$PS1=“HELLO>”
HELLO>
PS2变量
是为第二个提示符设置值的环境变量
LOGNAME变量
包含用户的注册名字
$echo“${LOGNAME}”
SHLVL变量
该变量包含当前工作的shelllevel
SHELL变量
环境变量存储了用户缺省的shell
env命令
可用来查看所有的已移出的环境变量表和它们各自的值!
命令替换
在单个命令行中使用多个命令的另外一种方法(非Pipes)是通过命令替换
echo“thedatais`date`”
expr命令
用于求之算术表达式。该命令的输出被送到标准输出
$expr4+5
将在屏幕上显示9
算术展开:
你可以在$((…))中括一个表达式,用下面的命令来计算它的值;
$((expression))
example1
编写一个shell脚本用于计算呼叫中心未应答的询问的数量。该脚本应该接受一天那所报告的询问的总数和应答的询问的数量,以便计算未应答的询问的数量。
所有未应答的询问总数=所有询问的总数-应答的询问的数量
<!--[if!supportLists]-->※<!--[endif]-->※※※※※※※※※※※※※※※※※※※※※※※
条件执行
test和[]
求值表达式,并返回true(0)或false()
数值测试:
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真
if构造
Linuxshell提供了循环和判定的构造,可以在shell脚本中使用
算术测试
结合if构造,它可以用于测试变量的数字值
串测试
test命令也可以用于字符串
=等于则为真
!=不相等则为真
-z字符串长度为零则为真
-n字符串长度不为零则为真
文件测试
test命令也可以用于检查文件的状态
-e文件存在则为真
-r文件存在并且可读则为真
-w文件存在并且可写则为真
-x文件存在并且可执行则为真
-s文件存在并且至少有一个字符则为真
-d文件存在并且为目录则为真
-f文件存在并且为普通文件则为真
-c文件存在并且为字符型文件则为真
-b文件存在并且为块特殊文件则为真
-a并且-o或者!非
exit命令
用于终止shell脚本的执行并返回到$提示符下
case。。。esac
shell脚本中使用的这个构造依据变量的值而执行一组特定指令
当变量的值和其中的一个值匹配的时候,就执行写在该值下的一组命令。
example3
迭代
while构造
while<条件>
do
<命令(s)>
done
只有条件为真的时候,才能执行do与done之间的命令
until构造
until循环构造的求值模式于while循环相反
until循环将继续执行直到求值的条件为真的时候
for构造
forvariable_namein<list_of_values>
do
…
done
for循环取一列值作为输入并对循环中每个值执行循环
break和contineu命令
同其他语言中的用法
example4
控制进程的执行
请求后台处理
用于请求后台进程的符号是(&)
$wctempfile&
[1]2082
$vinewfile
检查后台进程
ps(进程状态)命令为每个当前的活动的每个进程产生一行入口。
终止后台进程
可用kill,如下所示
kill278
查看完成一个命令所花的时间
你可以使用time命令来查看一个命令从开始到结束所花的时间
timefine/etc–name“passwd”2>/dev/null/dev/null表明忽略错误信息。
管道的介绍
垂直条(|)是管道字符
它只是shell:“|”前面命令的输出作为“|”之后命令的输入发送
ls–l|more
用管道组合命令,功能强大
㈧ shell脚本read命令的用法
read命令是读取用户在键盘上输入的信息,然后赋值到一个变量中;read命令是最常用的一个命令,它主要有三个参数,我们一个一个的讲解;
最基本用法:
echo-n "输入你的姓名:"
read name
echo "你的姓名$name"
echo后面的-n是指不换行,应为echo默认是换行的;
--------------------------------------------------------------------------
read -p用法
它的作用是在使用read的命令行是可以直接指定一个提示,例如
read -p "输入你的姓名" name
也就是把echo省略掉了;
-----------------------------------------------------------------------------
read -t用法
使用read命令后,如果你不在键盘上输入一个信息,那系统会一直等待着你的输入,而-t的用法就相当于计时器的作用,几秒中内要是没有输入信息,那read命令便不会再等下去;
read -t 5 -p "在五秒内输入你的姓名" name
-----------------------------------------------------------------------------
read -s用法
隐藏输入的值,就是在键盘上输入密码这一类的保密数据时不实时的显示出来;
㈨ 如何创建一个shell脚本检查命令行参数个数,如果参数不是三个显示一条错误信息,为三个则显示参数
1、“shell”中有一个特殊变量“$#”:表示包含参数的个数;
2、“if [ $# -ne 3 ] ; then # ”:如果参数不为3个
3、输入“if [ $# -ne 3 ];then echo errorelse echo "$1 $2 $3"if”
㈩ Shell脚本常用命令
Linux常用命令
ls常用命令
cd常用命令
rm常用命令
grep常用命令
grep命令用于查找文件里符合条件的字符串。
常用指令名称
-A
–after-context
显示符合范本样式的那一行之外及该行之后的内容
输出内容:
aaaa // 该行高亮
bbbb
-b
–byte-offset
输出匹配行并且在在该行前展示第几行
输出内容:
0: aaaa
-c
–count
输出符合匹配字符串的行数
输出内容:
1
其他命令
获取当前界面元素
获取任务列表
app入口
启动应用
列出当前已连接的设备
输出内容:
连接指定设备
例:(SERIAL的值为adb devices -l 输出的值)
屏幕截图
获取屏幕截图
录制视频
获取录制视频
测试界面性能
输出中会包含录制阶段所发生的动画帧的相关性能信息。以下命令使用 gfxinfo 收集指定软件包名称的界面性能数据:
输出最近帧性能信息
检查网络诊断信息
netstats 服务可提供自设备上次启动以来收集的网络使用情况统计信息
检查电池诊断信息
batterystats 服务会生成关于设备电池用量的统计数据
options列表
使用以下命令以计算机可读的 CSV 格式生成 batterystats 输出:
输出内容: