




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Shell 编程基础Shell 种类适用系统特点bashX86,linux系统默认shell功能 强大ashembedded 嵌入式系统体积小csh网络常用于网络文件系统注:如没有特殊要求,shell的脚本文件扩展名应为 xx.shShell脚本执行方法:1) 直接运行: vitest.sh chmoda+x test.sh./test.sh特点:重新启动一个文件制定的shell程序,用此shell对脚本进行解释执行。2) 指定shell 执行shell命令 test.sh (bash,ash,csh)(空格)test.sh特点:同上 3) 当前shell运行sourcetest.sh4) 当前shell运行.(空格)test.sh3和4的特点:用当前shell对脚本解释执行。Shell 变量 注: 在shell中变量无数据类型Shell中需要用变量来储存程序的数据。Shell 中的变量可分为三种:变量名命名规范:字母要大写,多个单词间以下划线分割。变量赋值变量名=值 (等号两端不能有空格,不加引号值也不能有空格)变量引用$变量名变量释放unset 变量名局部变量:自在当前的进程和程序中有效的变量。环境变量:是在一个用户的所有进程中都可以访问的变量。命令export 查看所有环境变量,也可以用export来定义一个环境变量例:#export XXX=1234之后另开一个终端 #echo $XX 1234上面的方法自在当前运行的所有进程中有效,系统重启后就会清除,只有把export XXX=1234写到环境变量配置文件/etc/profile中才会一直有效。位置变量:shell在运行时传入的参数。$?上一条命令的运行结果,成功0,失败非0$1$9shell命令运行时的命令行参数$0就是命令名称例一:新建a.sh文件执行结果#!/bin/bashecho $1echo $2echo $3echo $0rootlocalhost root#./a.sh a b c#a#b#c#./a.sh例二:rootlocalhost root# H=hellorootlocalhost root# A=$H everyone !单引号不支持特殊字符rootlocalhost root# B=$H everyone !双引号支持特殊字符bash: !: event not foundrootlocalhost root# B=$H everyone !!是逻辑运算符非 /是转义符rootlocalhost root# echo $A$H everyone !rootlocalhost root# echo $Bhello everyone !rootlocalhost root# unset A B H清空变量值rootlocalhost root# echo $Arootlocalhost root# echo $Brootlocalhost root# echo $HShell 测试测试语法:test 测试符号 被测字符串或变量test 被测字符串或变量1 测试符号 被测字符串或变量2也可用 代替test 测试符号 被测字符串或变量 被测字符串或变量1 测试符号 被测字符串或变量2 注:一般用 而不用 test测试结果:真 0假 非0文件测试符号字符串测试符号数值测试符号-f 是否为文件-d 是否为目录-L 是否为软链接-w 是否为可写-r 是否为可读-x 是否为可执行-s 长度是否大于0-u 是否有suid位设置= 两字符串是否相等!= 不等-n 为非空串-z 为空串 -eq 相等 -ne 不等 -gt 大于 -ge 大于等于 -lt 小于 -le 小于等于逻辑运算符 -a 与全1出1,有0出0 -o 或全0出0,有1出1 ! 非取反例1 -r a.txt a w a.txt 判断文件a.txt是否可读并且可写 -r a.txt a ! w a.txt 判断文件a.txt是否可读并且不可写例2rootlocalhost root# A=12 3 rootlocalhost root# $A = 456 bash: : too many arguments语法错误,因为变量$A不加“”时电脑把12 3带入等式为12 3 = 456 此时2和3之间的空格导致语法错误解决办法就是把变量两边也加上“”如下rootlocalhost root# $A = 456 rootlocalhost root# echo $?1rootlocalhost root#注:以后变量都要加上“”以免疏忽出错Shell 算术运算算术运算符 + 加- 减* 乘/ 除% 取模+=-=*=/=%= * 幂运算例:A=expr 3 * 2 echo $A9算数运算命令 exprexpr 值1 运算符 值2例:#echo expr 1 + 2 这里的是tab上面的反引号键反引号:引起的是一条shell命令,如果出现在脚本中,shell先执行反引号中的命令,并且用其运行结果替换反引号及其内容,然后继续执行。也可写成 #echo $ 1 + 2 或 #B=let 1 + 2 #echo $B 3let不常用。Shell 流程控制if 语句:单分支双分支嵌套if 测试 then 命令组fiif 测试 then 命令组1else 命令组2fiif 测试 1 ; thenthen 命令组1elif 测试 2then 命令组2 。 。 。else 命令组nfiif 语句也可将then写在if条件之后,中间用分号隔开。if 测试 ; then 命令组1elif 测试 ; then命令组2else 命令组3fi例:#!/bin/bashread Aif $A -ge 90 -a $A -lt 100 then echo great !elif $A -ge 80 then echo good !elif $A -ge 60 then echo pass !elif $A -lt 60 then echo no pass !fiunset Arootlocalhost shell_program# . if_example.sh95great !三种循环while ,until和for 语句:while 测试 (真循环,假退出)do 命令组done-while : (死循环)do 命令组doneuntil 测试 (真退出,假循环)do 命令组donebreak 退出循环 continue 跳出当次循环for 变量名 in 列表 (用列表中的每一项给变量赋值,do 列表中有几项就循环几次)命令组 done当for语句省略后面的in关键字时,将接受输入命令时的参数作为循环变量集。例:#!bin/bash#for_example_in.shfor strdo echo -e $strdoneunset str执行:rootlocalhost shell_program# . for_example_in.sh a b c d eabcdewhile 例:1+2+3+.+100=?#!/bin/bashSUM=0I=1while $I -lt 100 do I=expr $I + 1 SUM=expr $SUM + $Idoneecho $SUMunset SUM Iuntil 例:#!/bin/bashSUM=0I=1until $I -gt 100 do I=expr $I + 1 SUM=expr $SUM + $Idoneecho $SUMunset SUM Ifor 例1:统计root目录下有多少文件和目录#!/bin/bashfor FILE_NAME in /root/*do if -d $FILE_NAME then FILE=expr $FILE + 1 else CONTENT=expr $CONTENT + 1 fidoneecho file is $FILEecho conent is $CONTENTunset FILE_NAME FILE CONTENTrootlocalhost shell_program# . for_example.shfile is 6conent is 5for 的嵌套 例2:九九表#!bin/bash#for_example_nest.shfor i in 1 2 3 4 5 6 7 8 9do for j in 1 2 3 4 5 6 7 8 9 do if $j -le $i then echo -e $jc echo -e *c echo -e $ic echo -e =c echo -e $ $i * $j c fi done echo doneunset i jrootlocalhost shell_program# . for_example_nest.sh1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81case语句:case $变量名 in模式1) 命令组1 ;模式2) 命令组2 ;。*) 命令组nesac模式:用整数或字符串 也可用正则表达式和 ? *例: a0-9 0-50-9a? a*例:学生成绩判断等级#!/bin/bash#case_example.shread SCOREcase $SCORE in100) GRADE=A ;90-9) GRADE=A ;80-9) GRADE=B ;70-9) GRADE=C ;60-9) GRADE=D ;0-50-9) GRADE=NO PASS ;0-9) GRADE=NO PASS ;*) GRADE=Input not number! error! ;esacecho $GRADEunset GRADE SCORErootlocalhost shell_program# . case_example.sh90Arootlocalhost shell_program# . case_example.sh1NO PASSrootlocalhost shell_program# . case_example.shdjk;hvdf;bhInput not number! error!Shell 的输入输出文件重定向command filename把标准输出重定向到一个文件中command filename把标准输出以追加的形式重定向到一个文件中command 1 filename把标准输出重定向到一个文件中command filename 2&1把标准输出和标准错误一起重定向到一个文件中command 2 filename把标准错误重定向到一个文件中command 2 filename把标准错误以追加的形式重定向到一个文件中command filename 2&1把标准输出和标准错误一起追加到一个文件中command filenametwocommand命令以filename文件作为标准输入,以filenametwo文件作为标准输出command filenamecommand命令以filename文件作为标准输入1:表示stdout标准输出 2:表示stderr标准错误例:rootlocalhost shell_program# cat a.txta b c d e f grootlocalhost shell_program# tr a-z A-Z b.txtrootlocalhost shell_program# cat b.txtA B C D E F Gecho 命令输出结果echo命令可以输出文本或变量的值,是shell中最常用的输出方式。结果可以输出到终端,也可以写入到文件。例:echo $str #将结果输出到终端echo $str file #将结果重定向到file中,没有file文件就创建,有则覆盖 echo $str file #将结果追加到file文件中echo输出的内容可以有下面的格式控制字符: c :结尾加上c表示这行输完毕以后不换行。 t : 输出一个跳格,相当于按下tab键 n :输出一个换行注:如果要输出特殊字符,必须加-e参数,否则输出的结果中会直接打出字符,加-n参数可以禁止echo输出后的换行。例:rootlocalhost root# echo hello ,nBrjinghello ,nBrjingrootlocalhost root# echo -e hello ,nBrjinghello ,Brjingrootlocalhost root# echo -e hello ,tttBrjinghello , Brjingread 命令读取信息read 命令可以从键盘或文件中读入信息,并附给变量。 如果输入多个变量,用空格将将输入的变量隔开,如果输入的变量个数多于需要读取变量的个数,将会把剩余的变量赋值给最后一个变量。 在读取语句后面加上filename,表示从文件中读取数据,并且赋值给变量。例:rootlocalhost root# read A B Caaa bbb cccrootlocalhost root# echo -e $A n$B n$Caaabbbcccrootlocalhost root# read A Baaa bbb ccc dddrootlocalhost root# echo -e $A n$Baaabbb ccc ddd引号的使用”双引号:表示引用一个字符串。如果字符串里没有空格,A=123 和 A=”123”是一样的。字符串不能直接输出$引号 双引号 反斜线 反引号,需要前面用转义字符”。例:rootlocalhost root# A=123rootlocalhost root# echo $A123rootlocalhost root# B=123rootlocalhost root# echo $B123rootlocalhost root# A=12 3bash: 3: command not foundrootlocalhost root# A=12 3rootlocalhost root# echo $A12 3rootlocalhost root# B=123rootlocalhost root# echo $B123rootlocalhost root# B=$123rootlocalhost root# echo $B$123rootlocalhost root# B=1 2 3rootlocalhost root# A=$B $B ! rootlocalhost root# echo $A1 2 3 $B ! 单引号:表示引用一个字符串。用法与双引号相似。但不能使用$引号 双引号 反斜线 反引号。如果双引号中再使用单引号,字符串输出时,会输出这个单引号。例:rootlocalhost root# A=12 3rootlocalhost root# echo $A12 3rootlocalhost root# B=$Arootlocalhost root# echo $B12 3rootlocalhost root# C=$Arootlocalhost root# echo $C$Arootlocalhost root# B=$123rootlocalhost root# echo $B$123反引号:用于执行引号中的系统命令,然后将命令的结果返回。例:rootlocalhost root# A=lsrootlocalhost root# echo $Aanaconda-ks.cfg Desktop embwork friend_program install.log install.log.syslog minicom.log new_class NFS program service_teacher.sh反斜线:用于对特殊字符进行转义。如果字符串中含有& * + $ “ | ?这些特殊字符串,shell会认为这些符号代表着相应的运算。可以用反斜线来对这些字符串进行转义。例:rootlocalhost root# A=&*+$|?rootlocalhost root# echo $A&*+$|?综合练习:启动linux各项服务的shell脚本。#!/bin/bash#name test3.sh#mzy qy2009function
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园食品安全基础知识培训
- 校园防卫安全知识培训课件
- 校园消防知识培训课件主持词
- 芜湖工会考试试题及答案
- 出镜人员安全考试试题及答案
- 防暑安康面试题及答案
- 2025年贵州省中考语文真题(含答案)
- 施工企业面试题及答案
- 太铁卫生防疫考试试题及答案
- 种族趣味测试题及答案
- 护理团标解读住院精神疾病患者攻击行为预防
- 护士上半年护士考试题库
- 交通工程专业英语裴玉龙省公开课金奖全国赛课一等奖微课获奖
- 【年产100万瓶漱口水工艺设计及物料衡算9400字(论文)】
- 物资、百货、五金采购 投标方案(技术方案)
- 2024年济南历城区九年级中考英语一模考试试题(含答案)
- 国家集采药品培训课件
- 隐写分析技术及应用研究
- 甲功五项报告
- 拼多多实操培训课
- 征地拆迁工作总结汇报
评论
0/150
提交评论