*安徽理工大学计算机科学与工程学院Linux开发基础DevelopmentFoundationonLinuxOS方贤进,Ph.
D&AssociateProf.
*OutlineShellprogrammingonLinuxOSGNUC/C++programmingCGIprogramminginC/C++languagePerlprogrammingCGIprogramminginPerllanguage*Section1ShellprogrammingonLinuxOS*1.
1WhatisShellShellisacommandinterpreter;Shellisaprogramminglanguage,whichincludesvariable,keywordsandallkindsofcontrolsentences;ThegenericShellonUnixOSisBourneShell(forshort,sh).
Thereareotherkindsofshell,C-shell,KornShell,etc.
*1.
2HowtocreateandexecuteshellscriptCreateashellScriptusingVIeditorForexample:$vitestWhereviisaneditor,testisthefilenameofshellscript.
*1.
2HowtocreateandexecuteshellscriptToexecuteashellScriptUsinginputredirection.
Let"sh"readcommandsfromshellscriptfilename.
E.
g.
$shShiftpositionargument*1.
3shell中的变量1.
3.
2ShellvariablesdefinedbyUsersdefinition:Variablename=string#delimitermaynotbeusedcitation$variablenameAsapartofastring#attheendofastringstring$variablename#attheheadofastringorinthemiddleofastringstring1${variablename}string2*1.
4shell中的特殊字符1.
4.
1WildcardcharactersinShell星号*问号一对方括号[]其作用是匹配该字符组所限定的任何一个字符,例如:f[abcd]可以匹配fa,fb,fc,fdf[a-d]与f[abcd]作用相同感叹号表示否定,例如f[!
a-d].
c表示以f打头、第二个字符不是a-d的.
c文件名*1.
4shell中的特殊字符1.
4.
2Shell中的引号双引号""由它括起来的字符,除$,`,\仍保留其特殊功能外,其余字符通常作为普通字符单引号''由它括起来的所有字符或字符串都作为普通字符出现.
倒引号``由此括起来的字符串被shell解释为命令行,其执行结果取代整个倒引号部分.
例如:$echocurrentdirectoryis`pwd`如果当前工作目录为/home/wang的话则输出结果为currentdirectoryis/home/wang*1.
4shell中的特殊字符1.
4.
3Shell命令执行的顺序操作符(1)顺序执行顺序分割符;例如:$cd/home/fang;ls–l;cata.
txt管道线|例如:$who|wc–l|writeroot(2)逻辑与Command1&&command2&&…&&commandn例如:$cptest1/home/wang&&cat/home/wang/test1(3)逻辑或Command1||command2||…||commandn例如:$cptest1/home/wang||ls-l*1.
4shell中的特殊字符1.
4.
4Shell中的注释符、反斜线及后台操作符(1)注释符#(2)反斜线\例如要显示字符$本身,就要用\$$echo"thisisa\$dollarcharacter"(3)后台操作符&$gccfile1.
c&*1.
5shell编程中的输入输出命令1.
5.
1Shell中的输入输出标准文件stdoutStdinstderr1.
5.
2Shell中的输入输出重定向,>>$cattest.
c>test2.
c#显示文件的内容到另一个文件$cat>file2.
txt#通过键盘输入建立一个文件file2.
txt,按^z作为文件结束符*1.
5shell编程中的输入输出命令1.
5.
3Shell中的输入输出命令Read…EchoEcho命令中使用的转义字符:\bbackspace,\c不将光标移动到下一行\ttable,本身,\f换页,\n换行,\r回车\0Nascii码的八进制N的字符,如'\101'表示字符'A'例如:$echo"abcd"$'\t'"efgh"*1.
6Shell中的程序控制结构语句1.
6.
1if语句if条件判断then命令1else命令2fi条件判断有"命令语句"和"测试语句"两种形式,命令执行成功则条件为真,返回值为"0",否则为假,返回值非"0"*1.
6shell中的程序控制结构语句1.
6.
2命令语句形式的条件判断例1:下面的一段代码首先判断一个指定的用户是否存在,若存在则给出信息,否则向操作系统中增加一个用户.
ifcat/etc/passwd|grep$1#$1为脚本的命令行参数thenecho"Therehasexisteduser$1inOS!
"elseuseradd$1fi例2:下面代码判断在当前工作目录中,一个指定的名字是目录、文件还是不存在.
iftest-f$1#$1为脚本的命令行参数thenecho"$1isagenericfile!
"elseiftest-d$1#elseif可以写成elifthenecho"$1isadirectory!
elseecho"$1isnotexisted!
fifi*1.
6shell中的程序控制结构语句1.
6.
3测试语句形式的条件判断格式1:Testexpression格式2:[expression]Example:reada#iftest$a-gt0#用test测试if[$a-gt0thenecho"$aisgreaterthan0!
"elseecho"$aislessthan0!
"fi*1.
6shell中的程序控制结构语句1.
6.
3测试语句形式的条件判断注意:如果使用shell变量,为保持完整,避免造成歧义,最好用双引号将变量括起来在任何运算符、圆括号、或方括号前后至少需要一个空格条件测试需要另起一行时,用\作为续行符.
*1.
6shell中的程序控制结构语句1.
6.
3测试语句形式的条件判断文件测试:文件是否存在且不是空文件-sfile文件是否存在且是FIFO文件-pfile是否是目录-dfile文件是否存在-ffile文件是否存在且是可执行的-xfile文件是否存在且是可写的-wfile文件是否存在且是可读的-rfile*1.
6shell中的程序控制结构语句1.
6.
3测试语句形式的条件判断字符串测试:str的长度为0则为真-zstrstr的长度不为0则为真-nstrstr1是否与str2不相等str1!
=str2str1是否与str2相等str1=str2Str是否为空str*1.
6shell中的程序控制结构语句1.
6.
3测试语句形式的条件判断数值测试:n1>=n2n1–gen2n1n2n1–gtn2n1n2n1–nen2n1=n2n1–eqn2*1.
6shell中的程序控制结构语句1.
6.
4CASE语句casestring1inStr1)command-list1;;Str2)command-list2;;…Strn)command-listn;;esac*1.
6shell中的程序控制结构语句1.
6.
4CASE语句例子:echo"=======Menue======="echo"1.
Displaycalendar.
"echo"2.
Displaycurrenttime.
"echo"3.
DisplayOSversion.
"echo"4.
DislayonlineUsers.
"echo"5.
Exit.
"echo"Pleaseselect:"readchoosecase$choosein[Aa1])cal;;#可以选择a,A,1执行第一个菜单项,下同[Bb2])date;;#正则表达式也可以写成B|b|2)[Cc3])uname-a;;[Dd4])w;;[Ee5])exit;;esac*1.
6shell中的程序控制结构语句1.
6.
5for循环语句格式:forvairable[inargument-list]docommand-listdone例1:argument-list为变量值列表.
显示1~10foriin12345678910doecho$idone*1.
6shell中的程序控制结构语句1.
6.
5for循环语句格式:forvairable[inargument-list]docommand-listdone例2:argument-list为为文件表达式.
打印当前目录下的所有文件名以s打头的文件的内容foriins*docat$i|pr#输出重定向到打印机done*1.
6shell中的程序控制结构语句1.
6.
5for循环语句格式:forvairable[inargument-list]docommand-listdone例3:argument-list为空,此种情况等价于循环变量依次取位置参数的值.
forvairable等价于forvarialbein$*,$*表示所有脚本参数的值.
编写一个shell,第一位置参数为指定的目录名,其后的参数为第一个参数指定目录下的文件,依次显示这些文件的内容.
Tobecontinued!
*1.
6shell中的程序控制结构语句1.
6.
5for循环语句dir=$1;shift#取目录名后,位置参数向左移位if[-d$dir]thencd$dirforname#indoif[-f$namethencat$nameecho"===endofthisfile!
elseecho"===invalidfilename:${dir}/${name}fidoneelseecho"===invaliddirectoryname:${dir}!
==="fi*1.
6shell中的程序控制结构语句1.
6.
6while循环语句—当型循环WhileexpressionDocommand-listDone例:显示1-100之间的整数i=1while[$i-le100]doecho$ii=`expr$i+1`#倒引号,expr是数值运算done*1.
6shell中的程序控制结构语句1.
6.
7until循环语句—直到型循环untilexpressionDocommand-listDone例:显示1-100之间的整数i=1until[$i-gt100]doecho$ii=`expr$i+1`#倒引号,expr是数值运算done*1.
6shell中的程序控制结构语句1.
6.
8break、continue语句、算术运算、退出脚本命令Break[n]表示从while或until循环中跳出,n表示是跳出几层循环,默认是1Continue[n]表示跳过循环体中在它之后的语句,回到循环开头,进行下一次循环.
算术运算:exprn1运算符n2运算符有+退出脚本命令:exit[n],n为设定的退出值*1.
6shell中的程序控制结构语句1.
6.
8break、continue语句、算术运算例:显示出2-100之间的所有素数i=2while[$i-le100]doj=2flag=1#flag为1表示i是素数while[$j-le`expr$i/2`doif[`expr$i%$j`-eq0thenflag=0;breakfij=`expr$j+1`doneif[$flag-eq1]thenecho"${i}isaprime!
fii=`expr$i+1`done*1.
6shell中的程序控制结构语句1.
6.
9自定义函数Functionname(){Command-listreturn[n]}编写一个测试文件/目录的函数testfile(函数定义{if[-d$1]thenecho"$1isadirectory!
"elseecho"$1isnotadirectory!
"fireturn}testfile$1#函数调用*1.
6shell中的程序控制结构语句1.
6.
9自定义函数例:将判断一个数是否是素数写成一个函数,并调用之prime(函数定义{flag=1j=2while[$j-le`expr$1/2`doif[`expr$1%$j`-eq0thenflag=0;breakfij=`expr$j+1`doneif[$flag-eq1]thenreturn1#返回值elsereturn0fi}prime$1#函数调用if[$-eq1]#函数返回值保存在变量$中thenecho"$1isaprime!
"elseecho"$1isnotaprime!
"fi*Section1大作业用shell编程设计一个LinuxOS中的系统用户管理程序,包含3大功能:1,设计一个文本菜单,包含所要实现的功能选项.
2,新用户增加.
能够判断该用户是否已经存在,若存在给出出错信息并要求重新输入新用户名,否则的话增加一个系统新用户,该用户隶属于students组,shell为/sbin/nologin,home目录为/home/students/username.
并把该用户的初始口令设置为其用户名.
3,用户查找功能.
根据输入的用户名,查找该系统中是否已经有该用户存在,若不存在则给出找不到的信息,否则的话显示所有该用户帐号的有关信息.
4,删除用户功能.
根据输入的用户名,查找该系统中是否已经有该用户存在,若不存在则给出找不到的信息,否则的话删除该用户帐号并将其宿主目录中的数据也一并删除.
参见/home/xjfang/shell/中shell程序useradmin的代码
今天看到群里的老秦同学在布局自己的网站项目,这个同学还是比较奇怪的,他就喜欢用这些奇怪的域名。比如前几天看到有用.in域名,个人网站他用的.me域名不奇怪,这个还是常见的。今天看到他在做的一个范文网站的域名,居然用的是 .asia 后缀。问到其理由,是有不错好记的前缀。这里简单的搜索到.ASIA域名的新注册价格是有促销的,大约35元首年左右,续费大约是80元左右,这个成本算的话,比COM域名还贵。...
zji怎么样?zji最近新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码zji,优惠后韩国服务器最低每月440元起。zji主机支持安装Linux或者Windows操作系统,会员中心集成电源管理功能,8折优惠码为终身折扣,续费同价,全场适用。ZJI是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服...
阿里云国际版注册认证教程-免绑卡-免实名买服务器安全、便宜、可靠、良心,支持人民币充值,提供代理折扣简介SunthyCloud成立于2015年,是阿里云国际版正规战略级渠道商,也是阿里云国际版最大的分销商,专业为全球企业客户提供阿里云国际版开户注册、认证、充值等服务,通过SunthyCloud开通阿里云国际版只需要一个邮箱,不需要PayPal信用卡就可以帮你开通、充值、新购、续费阿里云国际版,服务...
linux查看进程为你推荐
在线漏洞检测如何查看网站的漏洞?最新qq空间代码QQ空间代码spgnuxps = getCon().prepareStatement(sql);啥意思,求注释,要是不嫌麻烦帮我把下面的也给注释了邮箱打不开怎么办我的邮箱打不开怎么办吴晓波频道买粉《充电时间》的节目跟《吴晓波频道》哪个好听?今日热点怎么删除今日热点怎么卸载删除 今日热点新闻彻底卸载删神雕侠侣礼包大全神雕侠侣陈晓礼包兑换码怎么获得安装迅雷看看播放器如何用手机安装迅雷看看播放器商标注册查询官网怎么查商标有没有注册云挂机趣头条后台云挂机辅助后台云挂机辅助有谁用过?想了解实际情况。
海外域名注册 双线主机租用 网页空间租用 域名备案流程 2014年感恩节 紫田 英语简历模板word 大容量存储 警告本网站美国保护 国外免费全能空间 百兆独享 宁波服务器 美国堪萨斯 服务器监测 四核服务器 创建邮箱 中国电信网络测速 中国电信宽带测速 碳云 web是什么意思 更多