志在指尖
用双手敲打未来

shell脚本学习指南(shell脚本怎么写)

shell脚本学习指南

许多中型、大型的程序都是用编译型言语写的,例如:C、C+、Java等。这类程序只要从源代码(SourceCode)转化成目标代码(objectcode),便能直接通过核算机来履行。
编译型言语的好处是高效,缺陷是:他们多半运作于底层,所处理的是字节、整数、浮点数或是其他机器层级的目标。而脚本言语Shell一般是解析型(interpreted)的。这类程序的履行,是由解析器(interpreter)读入程序代码,并将其转化成内部的方法。解析器自身是一般的编译型程序。
查找文本
以grep程序查找文本,传统上有三种程序:
1.grep:运用根本正则表达式(BasicRegularExpression,BRE)
2.egrep:扩展grep运用扩展正则表达式(ExtendedRegularExpression),不过会耗费更多的资源。
3.fgrep:快速grep匹配固定字符串而非正则表达式,grep与egrep只能匹配单个正则表达式,而fgrep运用不同的算法,却能匹配多个字符串。
简略的grep
grep-Fdanbo,-F选项,以查找固定字符串danbo。事实上,只要匹配的方式里边未包括正则表达式的meta字符表达式的meta字符,grep默许行为方式就等于运用了-F。
grep的语法格局:
-E运用扩展正则表达式进行匹配。grep-E等同于egrep。
-F运用固定字符串进行匹配。grep-F可替代传统的。
-i方式匹配时疏忽字母巨细写差异。
-q静默地。不输出成果,echo$?回来0成功,回来1没有找到匹配的内容。
-v显现不匹配方式的行。
-c核算找到查找字符串的次数。
-n输出含有查找字符串所内行的行号。
正则表达式
正则表达式是一种表明方法,让你能够查找匹配特定准则的文本。
常用到的字符及其意义:
\逃脱字符,关闭后续字符的特别意义。有时则具有特别意义:\{…\}
.匹配恣意单个字符,可是nul在外。
*匹配之前的恣意的单个字符。当坐落榜首个字符时,无意义。
^匹配内行或字符串的开端处。BRE:仅在正则表达式的最初出具有意义。EBR:置于任何方位都具有特别意义。
$匹配前面的正则表达式,在字符串或行尾。BRE:仅在正则表达式结束处具特别意义。ERE:置于任何方位都具有特别意义。
[…]方括号表达式,匹配方括号内的恣意字符。衔接符“-”指的是接连字符的规模。“^”置于榜首个方位取反。
\{n,m\}区间表达式,匹配在它前面的单个字符重现的次数,\{n\}指的是从头n次;\{n,\}从头n次及以上;\{n,m\}指的是前面单个字符从头n至m次。
\(\)将“\(”与“\)”的方式存储在特别的“保留空间”。最多能够将9个独立的子方式(sbupattern)存储在单个方式中。能够通过\1至\9,被重复运用在相同方式里。例如\(ab\).*\1指的是匹配ab组合的两次从头,中间能够存在恣意数目的字符。例如能够匹配:ab……….ab。另一个例如:\(ab\)\(cd\).*\2\1则是匹配:abcd……..cdab留意后面的\n表明匹配前面第几个小括号。
+匹配前面正则表达式的一个或多个实例。
?匹配前面正则表明式的零个或一个实例。
|匹配|左右的正则表达式。
()匹配括号括起来的正则表达式。
POSIX字符集
扩展正则表达式
咱们比较一下BRE与ERE的差异,主要体现在以下几点:
BRE只界说了4组元字符:
[]用于在多个字符中选定一个字符进行匹配,[]内能够有-以示规模,但-自身不是元字符
.用于匹配恣意字符
^用于匹配时表明“非”的意义,还有一个用法是匹配行首
$用于匹配行尾
ERE在此基础上增加了3组元字符的界说:
{}用于表明重复匹配的次数。BRE中只将{}当作普通字符对待,要运用此功用有必要加\进行转义,即“\{\}”
()用于分组。BRE中只将()当作普通字符对待,要运用此功用有必要加\进行转义,即“\(\)”比方:(why)+匹配一个或多个why
|彻底为ERE新增的多项匹配才能界说的,BRE无多项匹配才能,只将|作普通字符对待。比方:(read|write)+表明一个或多个read或许一个或多个write。
留意|为一切运算中优先级最低的,^abcd|efgh$意思是“匹配字符串的其实处是否有a、b、c、d,或许结束处是否有e、f、g、h”,这个和^(abcd|efgh)$不一样,后者表明“以abcd最初或许以efgh结束”
ERE运算符的优先级
扩展:“\”<与“\>”别离匹配word的最初语结束,其间word是由字母、数字、下划线组成的。咱们称这类字符为单词组成(word-constituent)。例如:\
额定的GUN正则表达式运算符
在文本里进行替换
sed根本用法:
-e当有多个指令需求运用时,就有必要运用-e了。
-fscript-file读取脚本文件中的sed指令。
-n安静方式,仅显现通过sed功利处理的行。一般与p一同运用。
/字符扮演定界符(delimiter)的角色,用于切开正则表达式与替换文本,任何可现现实的字符都能作为定界符。标点符号也是能够的(比方:分号、冒号、逗号)。
例如:echo/home/tolstoy/|sed’s;\(/home\)/tolstory/;\1/lt/;’
留意:\1表明匹配前面()之间的内容,且向后引证最多能够用到9个,这点前面已经讲过了。
sed’s/Tolstory/Camus/g'<example.txt#g表明全局性(Global)。另一个结束指定数字,指示第n个匹配呈现才去替代。
例如:sed-e’s/foo/bar/g’-e’s/chicken/cow/g'<example.txt
不过,假如有许多要修正的话,咱们就需求将修正指令悉数放入脚本文件中,再运用sed调配-f选项:
catfixup.sh
s/foo/bar/g
s/chicken/cow/g

sed-ffixup.shexample1.xml>example2.xml
上面意思为读取fixup.sh内的修正指令,然后修正example1.xml的内容,修正后成果保存在example2.xml文件中。sed的运作原理
sed读入每个文件,一次读入一行,将读取的行放入内存的一个区域—称之为方式空间(patternspace)。相似变量:内存的一个区域在修正指令的指示下能够改动,一切修正上的操作都会运用到方式空间的内容。当一切操作完成后,sed会将方式空间的最终内容打印到规范输出,再回到开端处,读取另外一个输入行。
sed匹配特定行
咱们能够约束一条指令运用到哪些行,只要在指令前置一个地址(address)即可。
例如:sed’/named/s/nologin/fuck/g’
先定为含有named的行,然后在该行中进行替换。
规模:
指定行的规模:sed-n’10,21p’/etc/passwd#打印10-21行。
指定替换规模:sed’/foo/,/bar/s/baz/quux/g’/etc/passwd#从含有foo的行开端匹配到bar的行,再进行替换。
否定正则表达式:
sed’/used/!s/new/used/g’#将没有used的每一行里一切的new改为used。
行v.s.字符串
大部分简易程序都是处理输入的数据的行,想grep与egrep,以及sed。在这些状况下,不会有内嵌的换行字符呈现在将要匹配的数据中,^与$别离表明行的最初与结束。
但是对于awk、Perl、Python,所处理的就多半是字符串。不过这类都会让你标明每条输入记载的定界符,所以有可能独自的输入行里会有内嵌的换行符,这种状况下,^与$是无法匹配内嵌的换行字符的。
记载和字段
一条记载(record)指的是相关信息的单个调集;字段(filed)指的是记载的组成一部分。
/etc/passwd每条记载中的每个字段的意义如下:
root:x:0:0:root:/root:/bin/bash
运用cut选定字段
cut指令是用来剪下文本文件里的数据,文本文件能够是字段类型或是字符类型
例如:cut-d:-t1,5/etc/passwd#规模1,5也能够运用1-5
-c以字符为参阅
-d指定定界符,默许是制表字符(Tab)
-ffiled指定第几个字段。
运用join衔接字段
join指令能够将多个文件结合在一同,每个文件里的每条记载,都同享一个键值(key),键值值得是记载中的主字段,一般会是用户称号、个人姓氏、员工编号之类的数据。
语法:join[options…]file1file2
-1field1
-2field2
标明要结合的字段。-1field1指的是从file1取出field1,而-2指的是从file2中取出field2。
-ofile.field
输出file文件中的field字段。一般的字段则不打印。除非运用多个-o选项,即可显现多个输出字段。
-tseparator
运用separator作为输入字段切开字符,而非运用空白。
运用awk从头编排字段
awk规划的重点就是在字段与记载上:awk读入输入记载(一般是一些行),然后自动将各个记载切分为字段。awk将每条记载内的字段数据,存储到内建变量NF。
默许以空白切开字段—例如空格与制表符字段(或两者混用),你能够将FS变量设置为一个不同的值。
如需字段值,则是调配$字符。一般$之后会接着一个数值常数,也可能是接着一个表达式,不过多半是运用变量称号。例如:
awk'{print$1,$NF}’#打印第1个与最终一个字段
awk’NF>0{print$0}’#打印非空行等同于:grep-v”^$”
设置字段切开字符
例如:awk-F:'{print$1,$5}’/etc/passwd
-F选项会自动地设置FS变量。请留意,程序不用直接参照FS变量。awk的输入、输出切开字符用法是分开的,这点与其他东西程序不同。也就是说,有必要设置OFS变量,改动出字段切开字符。方法是在指令行里运用-v选项。例如:
[root@localhostuestc]#awk-F:-v’OFS=**”{print$1,$NF}’./passwd
root**/bin/bash
打印行
[root@localhostuestc]#awk-F:'{print”User”,$1,”isreally”,$NF}’/etc/passwd
Userrootisreally/bin/bash
简略明了的print句子,假如没有任何参数,则等同于print$0,即显现整条记载。
当咱们运用printf句子时,用法如下:
[root@localhost/]#awk-F:'{printf”User%sisreally%s\n”,$1,$NF}’/etc/passwd
Userrootisreally/bin/bash
awk的print句子会自动供给最终的换行字符,然后,假如运用printf句子,则用户有必要要通过\n转义序列的运用自己供给。
请记住:在print的参数间用都好隔开!,不然,awk将衔接相邻的一切值。
开端于铲除
BEGIN与END这两个特别的“方式”,它们供给awk程序开端(startup)与清楚(cleanup)操作。
BEGIN与END的句子块是可选用的。如需设置,习惯上它们应别离坐落awk程序的最初与结束处。你能够有数个BEGIN与END句子块,awk会依照它们呈现在程序的顺序来履行:一切的BEGIN句子块都应该放在开端处,一切END句子块也应该放在结束。例如:
[root@localhost/]#awk’BEGIN{FS=”:”;OFS=”**”}{print$1,$NF}’/etc/passwd
root**/bin/bash
排序文本
未供给指令行选项时,整个记载都会根据当时locale所界说的次序排序。在传统的的Clocale中,也就是ASCII顺序。这里咱们介绍一个排序指令:sort
sort[options][files]
-b疏忽最初的空白。
-c检查输入是否已正确地排序。假如未通过排序,退出码(exitcode)非零值,不会有任何输出。
-d字典顺序,仅处理英文字母、数字、空格。
-f疏忽英文字母的巨细写。
-i疏忽无法打印的字符,即只辨认
-k指定排序的键值,即依照哪个域进行排序。
-n以整数类型排序。
-ooutfile将输出写到指定的文件,而非规范输出。
-r倒置排序(descending),默许是由小到大(ascending)。
-t指定切开符,默许空格
-uuniq即丢弃一切相同键值的记载,即删掉重复行。
例如:假如你想把成果输入到输入文件中,则不同能重定向了,此时咱们需求运用-o
例如:sort-rnumber.txt-onumber.txt
例如:sort-t”:”-k2/etc/passwd
运用点号字符方位,则比较的开端(一对数字的榜首个)或结束(一对数字的第二个)在该字符方位处:
-k2.4,-k5.6指的是从第二个字段的第四个字符开端比较,一向比到第五个字段的第六个字符。
例如:sort-t”:”-k3.1/etc/passwd
例如:sort-t”:”-k3n-k4n/etc/passwd#依照榜首个key值排序,然后再依照第二个key值排序。
sort的安稳性
安稳性(Stable)指的是:相同的记载输入顺序是否在输出时时也可保持原状,这点sort并不安稳,不过咱们能够通过–stable选项来使其变得安稳。
删去重复
有时,将数据流里接连重复的记载删去是很有必要的,前面咱们介绍了sort-u的用法,不过它的消除操作是根据匹配的键值,而非匹配的记载咱们则运用uniq。
-c可在每个输出行之前加上改行重复的次数。
-d仅显现重复的行。
-u仅显现未重复的行。
默许状况下不带任何选项:显现唯一的、排序后的记载,重复则仅取唯一行。
从头格局化段落
fmt通过将一切非空白行的长度设置为简直相同,来进行简略的文本格局化。
-s仅仅切开较长的行,但不会将短行结合成长行。
-wn则设置输出行宽度为n个字符(默许一般为75个)。
例如:fmt-s-w10<<END_OF_DATA
[root@localhost~]#fmt-s-w10<<END
>WelcometoUESTC
>Ali
>Taobao
>BaiduGroup
>END
Welcome
toUESTC
Ali
Taobao
Baidu
Group
核算行数、字数以及字符数
wc-c核算字节数(bytes)
wc-l核算行数
wc-w核算字数
wc-m核算字符数(character)
留意:wc在处理的时分,必定要在文件结束存在换行符,不然核算行数是不正确的:
[root@localhost~]#echo”UESTC”|wc-l
1
[root@localhost~]#echo-n”UESTC”|wc-l
0
提出最初或结束数行
显现前n条记载:
head-nn
head-n
awk’FNR<=n’
sed-enq
sednq
调查动态调查结束:tail-n10-f/var/log/messages
几个值得参加东西箱的指令
dd能够以用户指定的块巨细与数量拷贝数据,能够进行巨细写转化,以及字符转化,备份等。
dd运用实例:
1.将本地的/dev/hdb整盘备份到/dev/hdd
ddif=/dev/hdbof=/dev/hdd
2.备份/dev/hdb全盘数据,并运用gzip东西进行紧缩,保存到指定途径
ddif=/dev/hdb|gzip>/root/image.gz
3.将紧缩的备份文件恢复到指定盘
gzip-dc/root/image.gz|ddof=/dev/hdb
4.备份磁盘开端的512字节榜首扇区文件,即MBR信息到指定文件
ddif/dev/hdaof=/root/imagecount=1bs=512
count=1指仅拷贝一个块;bs=512指块巨细为512个字节。
5.拷贝内存内容到硬盘
ddif=/dev/memof=/root/mem.binbs=1024(指定块巨细为1k)
6.增加swap分区文件巨细
Step1:创立一个巨细为256M的文件
ddif=/dev/zeroof=/swapfilebs=1024count=262144
Step2:把这个文件变成swap文件:
mkswap/swapfile
Step3:启用这个swap文件:
swapon/swapfile
Step4:修正/etc/fstab文件,使在每次开机使自动加载swap文件:
/swapfileswapswapdefault00
7.毁掉磁盘数据
ddif=/dev/urandomof=/dev/hda1#留意运用随机的数据填充硬盘,在某些必要的场合能够用来毁掉数据
8.测验硬盘的读写速度
ddif=/dev/zerobs=1024count-1000000of=/root/1GB.file;
ddif=/root/1GB.filebs=64k|ddof=/dev/null
9.修复硬盘
ddif=/dev/sdaof=/dev/sda
file用于检测文件类型
od八进制码转存(octaldump)指令,显现ASCII码。此指令主要用来查看保存在二进制文件中的值。
strings用来查看二进制文件,例如声响、图像文件有时会在最初出包括一些有用的文本数据。
例如:
[root@localhost~]#strings-a12.jpg|head-c256|fmt-w65
JFIFrExifAppleiPhone5s7.1.12014:06:1223:11:3002210100
2014:06:1223:11:302014:06:1223:11:30dAppleiOS
tr它能够非常容易地试下sed许多最根本的功用。它能够用一个字符来替换另一个字符,或许能够彻底除去一些字符。一起也能够用它来除去重复字符。
-c用字符串1中字符集的补集替换此字符集,
-d从规范输入中删去字符串1中一切字符
-s删去一切重复呈现字符序列,只保留一个。
例如:
[root@localhost~]#echoHello,world,root,2015|tr-c”[0-9]””*”
*****************2015*
能够看出,咱们运用0-9,增加-c选项后,会把0-9替换为其补集,这时补集自然不包括0-9,而包括许多其他的字符,接下来就把其他字符都替换成*号,但不包括数字。
变量与算术
Shell脚本里边经常呈现一些简略的算术运算,例如每通过一次循环,变量就会加1,。Shell为内嵌算术供给了一种标记法,称为算术打开(arithmeticexpansion)。Shell会对$((…))里边的算术表达式进行核算,再将核算后的成果放回到指令的文本内容。
最常见的指令是export,其用法是将变量放入环境里。环境是一个称号与值的简略列表,可供一切履行中的程序运用。新的进程会从其父进程继承环境。
export指令仅将变量加到环境中,假如你要从程序的环境中删去变量,则要用到env指令,env也可暂时改动环境变量的值:
env-iPATH=/usr/bin/local
-i选项时用来初始化环境变量的,仅传递指令行上指定的变量给程序运用。
unset指令从履行内中的Shell中删去变量与函数。默许状况下,它会免除变量设置。
-f删去指定的函数
-v默许选项,删去指定的变量。
打开运算符
在Shell下,有更杂乱的方法可用与更特别的状况。这些方法都是将变量名括在花括号里${variable},然后再增加额定的语法以告诉Shell该做些什么。
替换运算符:
${varname:-word}假如varname存在且非null,则回来其值;不然,回来word。
${varname:=word}假如varname存在且非null,则回来其值;不然,设置它为word,并回来其值。
${varname:?word}假如varname存在且非null,则回来其值;不然,显现varname:word。
${varname:+word}假如varname存在且非null,则回来word;不然回来null。为了测验变量的存在。
上述中“:”是可选的,假如没有的话,则将存在且非空改为存在。
方式匹配运算符:
${path#/*/*}从前匹配最短删去或替换。
${path%/*/*}从后匹配最短删去或替换。
${#variable}回来$variable值里的字符长度。
方位参数:
$#供给传递到Shell脚本或函数的参数总数。
while[$#!=0]
do
case$1in

esac
shift
done
$*&$@将一切指令行参数传递给脚本或函数所履行的程序。
$*将一切指令行参数视为单个字符串。
$@将一切指令行参数视为独自的个体。
shell脚本怎么写
咱们好!我是handsomecui,下面我为咱们解说一下shell脚本的写法,讲的不好的地方,欢迎咱们留言拍砖。
1.在linux下会写shell脚本是非常重要的,下面我参照例子给咱们展示几个脚本,顺带这学习shell的语法:
什么时候helloworld是必不可少的,第一个脚本肯定与helloworld是离不开的:
#!/bin/sh
a=”helloworld!”num=2echo”ais:$anumis:${num}nd”
运转成果:ais:helloworld!numis:2nd
shell脚本简略易懂,只要有一点点c言语的根底,这些都是小case;
2.下面带着咱们学学if句子:
先抛出一个问题:写一个脚本,判别当时所用的shell
#!/bin/sh
#注意if的空格以及[]里边的空格这儿错了半天啊if[“$SHELL”=”/bin/bash”];then
echo”yourloginshellisthebash\n”echo”SHELLis:$SHELL”elseecho”yourloginshellisnotbashbut$SHELL”fi
#[-f”somefile”]:判别是否是一个文件
#[-x”/bin/ls”]:判别/bin/ls是否存在并有可执行权限
#{-n”$var”}:判别$var变量是否有值
#[“&a”=”$b”]:判别$a和$b是否持平
[-f”/etc/shadow”]&&echo”Thiscomputerusesshadowpasswords”if[-f”/etc/shadow”];then
echo”电脑密码运用隐藏字符”elseecho”并没有”fi
#是注释的意思,相关部分现已在里边详细给咱们注释解说了,注意if句子的格局
if[];then
elif[];then
else
fi
别的注意if句子还能够简略的用&&与||或句子来替代;别的如果想要深化了解if能够找男人test(在linux遇到问题要学会找男人处理,man)
3.为了让咱们愈加熟练的运用shell,那么操练下吧,问题:写一个脚本使其从一个文件里边读入有echo的句子,并把其写在本文件末尾;
#!/bin/sh
#-r代表此文件是否可读,详细见mantest
mailfolder=/home/handsome/work/linux_learn/shell_learn/readme.txt
#[-r”$mailfolder”]||{echo”Cannotread$mailfolder”;exit1;}
#echo”$mailfolderhasmailfrom:”#grep”^echo”$mailfolderif[-r”$mailfolder”];then
echo”$mailfolderhasmassagefrom:”echo|grep’^echo’$mailfolder>>readme2.txt
chmod+rreadme2.txt
catreadme2.txt>>$mailfolder
rm-freadme2.txtelseecho”Cannotread$mailfolder”touch$mailfolder
chmod+rw$mailfolder
echo”echo人生自古谁无死,六区蛋清找旱情!”>>$mailfolder
fi
这儿由于重定向不能本文见输出到本文件输出,于是我就想了个办法,新建个文件,再重定向到这个文件,大神有别的简略办法能够下面留言拍砖;
4.接下来,咱们操练下while的用法,老规矩详细问题来分析;
问题:写一个脚本(不建议运用for变量–for是依据空格取值)
1.设定变量FILE的值为/etc/passwd
2.顺次向/etc/passwd中的每个用户问候,并且说出对方的ID什么(Hello,root,yourUIDis0.)
3.统计一个有多少个用户
#!/bin/bash
fl=/etc/passwd
count=`cat$fl|wc-l`
#下面是一个管道,下面循环读文件中的每一行
cat$fl|whilereadlinedouser=`echo$line|awk-F’:”{print$1}’`
#代表以:分段$1便是取第1段
uid=`echo$line|awk-F’:”{print$3}’`
echo”hello,$userYourUIDis$uid”done
echo”====User_count:$count====”#前面求得的用户数
这儿要注意到awk的用法,能够找linux的男人处理;
5.操练一下for句子吧
问题:写个脚本;
1.切换工作目录至/tmp
2.顺次向/tmp目录中的每个文件或子目录问候(Hello,log)
3.统计/tmp目录下共有多个文件,并显示出来
#!/bin/bash
cd/tmp
foriin/tmp/*
do
echo”Hello,$i”
done
count=`ls-l|grep’^-‘|wc-l`
echo”====file_count:$count====”
这个问题就相对简略了些,一个for句子就能够搞定,当然能够while搞搞
6.那么问题来了:
question:
传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商
#!/bin/bash
a=$1b=$2[-z$a]&&echo”please\$1number1″&&exit1[-z$b]&&echo”please\$2number2″&&exit2[!$#-eq2]&&echo”–pleasenum1num2″&&exit3#$#传递到脚本的参数个数
#-eq相当于=,-ne相当于不等于,-ge>=,-gt>,-le<=,-lt<echo”$a+$b=$(($a+$b))”echo”$a-$b=$(($a-$b))”echo”$a*$b=$(($a*$b))”echo”$a/$b=$(($a/$b))”
这儿要注意的是,需求传入两个参数;
详细用到的一些常识请看下面:
读到这儿咱们对上面的小脚本是不是感觉特别easy了,哈哈;
7.写一个脚本;求1到100的和?
#!/bin/bash
sum=0i=1while[$i-le100]dosum=$(($sum+$i))
i=$(($i+1))
done
echo”$sum”
这个脚本就soeasy了;
8.接下来,咱们写个很有用的脚本吧,假设你现在在机房,你想要看看机房哪些ip在开着,便利咱。。。,是吧。
咱们能够经过ping指令测验192.168.0.151到192.168.0.254之间的一切主机是否在线
#!/bin/bashforiin`seq2254`doping-c1-w1192.168.51.$i>/dev/null2>&1#-c能够指定ping的次数,-w测验的时间-w1便是1秒中不管成功失败都结束
#-c-w后边都要输入参数所以都要带上l
#$?代表最后指令退出状况,0代表没错,其他代表有错
[$?-eq0]&&echo”192.168.51.$iIPisUP!”||echo”192.168.51.$iIPisdown!”done
在这儿2>&1代表不显示过错信息,其实便是把过错重定向到规范输出,然后重定向到/dev/null,/dev/null便是个黑洞,写入的任何东西都会丢失,其实简要说便是把正确或过错的输出扔到垃圾桶。
写到这儿咱们是不是感觉耳目一新呐,哈哈!
随笔操练:还有点bug
#/bin/bash
i=1sum=0#whilewhile[$i-le100]do((sum=sum+i))
((i=i+1))
done
echo$sum
#forsum=0for((j=1;j<=100;j++))do((sum=sum+j))
done
echo$sum
#selectselectflagin$@docase$flagin$1)echo$1;;
$2)echo$2;;
$3)echo$3;;
$4)echo$4;;*)echo”inputerror”break;;
esac
done
#shift
echo-e”theallargis\n”while[$1]doecho$1shift
done#ifnum=`ls|wc-l`
[num==0]&&echo-e”havenofile\n”||echo-e”thereare$numfiles\n”forfilein`ls`doecho”thisfile$fileis”[-f$file]&&echo-e”ordinaryfile”if[-d$file];then
echo-e”dictionaryfile”;
fi
done
#function
filename=””rename(){
filename=echo`date`|awk-F”'{print$1$2$3}’}
rename
echo-e”filenameis$filename”[$?==0]&&mkdir$filename||echo-e”haveerror\n”

未经允许不得转载:IT技术网站 » shell脚本学习指南(shell脚本怎么写)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载