大家好,今天来为大家解答Linux 基础shell 编程这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
2.shell 编程的基本过程
基本流程分为三步:
给shell文件授予执行权限,==使用chmod命令修改权限==。执行shell文件,直接在命令行调用shell程序。例子:
shell允许用户创建变量来存储数据,但不支持数据类型(整数、字符、浮点)。分配给变量的任何值都被解释为字符串。变量=值
计数=1echo countDATE=dataecho 日期
==注意几点:==
变量没有类型
=号两边不能有空格。
变量必须大写
赋值时,使用“来框定它们。
Bourne shell 有以下四个变量:
用户自定义变量:在shell编程中,通常使用全部大写的变量:COUNT=1变量调用,变量前加$:echo $HOMELinux shell/bash从右到左赋值:Y=y, X=$ Y,echo X,y 使用unset命令删除变量的赋值:Z=hello,echo Z,hello,unset Z,echoZ
预定义变量
两个数字旁边必须写上{ },这样数值才能相同。
环境变量HOME:/etc/passwd 文件中列出的用户目录IFS: 内部字段分隔符,默认为空格、制表符和换行符PATH:shell 搜索路径PS1、PS2: 默认提示符($)和换行符提示符() TERM:终端类型,常用使用的包括vt100、ansi、vt200、xterm 等。
二、shell 功能语句
shell 程序由零个或多个shell 语句组成。 Shell语句包括三类:描述性语句、功能性语句和结构性语句。
**描述性语句** 以#开头,一行结束,不解释执行任何功能语句、任何shell命令、用户程序或其他shell程序结构语句、条件测试语句、多路分支语句、循环语句、循环控制语句等
#!/bin/sh## 该程序描述#command_1command_2 #command_2 语句描述.
常用功能性语句(命令)
==read==从标准输入读取一行并将其分配给以下变量。语法是:
read var 将所有读取到的数据赋值给var
read var1 var2 var3 将读取行中的第一个字分配给var1,将第二个字分配给var2,将所有剩余的字分配给最后一个变量。如果执行读语句时标准输入中没有数据,则程序将停留在这里等待,直到数据到达或执行终止。
#! /bin/bashecho ‘输入数字:’读取NUMecho $NUM
#! /bin/bashecho ‘输入年月日:’读Y M Decho ‘今天是$Y-$M-$D’
==expr 命令:==算术运算命令expr 主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)和取模(%)运算。例如
expr 12 + 5 \* 327expr 3 – 8/2-1num=9sum=`expr num \* 6`echo sum54
!运算符之间用空格分隔!
测试语句
==测试语句==
测试语句可以测试三个对象:
字符串/整数/文件属性
每个测试对象都有多个测试运算符,例如:
test ‘$answer’=’yes’#变量answer的值是否为字符串yestest $num -eq 18#变量num的值是否为整数18test -d tmp#测试tmp是否为目录名字符串test:
s1=s2 测试两个字符串的内容是否与s1完全相同!=s2 测试两个字符串的内容是否不同-z s1 测试s1 字符串的长度是否为0 -n s1 测试s1 字符串的长度是否不为0
整数测试:
a – eq b 测试a 和b 是否相等a – ne b 测试a 和b 是否不相等a – gt b 测试a 是否大于b a – ge b 测试a 是否大于等于b a – lt b 测试a 是否小于b a – le b 测试a 是否小于或等于b
#! /bin/bashA=’how’B=’hoW’test $A=$Becho $? //表示输出上一条语句的结果
#! /bin/bashA=’how’B=’how’test $A=$Becho $? //表示输出上一条语句的结果
相等为0(真),不相等为1(假)
#! /bin/bashA=’how’B=’hoW’test $A=$Becho $? //表示输出上一条语句的结果pwdecho $?ls fileecho $?
最后ls文件不存在,所以结果是2
#! /bin/bashA=99B=88test $A -ne $Becho $? //表示输出上一条语句测试的结果$A -gt $Becho $? //表示输出上一条语句的结果
三、shell 分支语句
1. 条件语句
==if .then.fi==语法结构:
if expression then command table fi 如果表达式为真,则执行命令表中的命令;否则退出if语句,即执行fi后面的语句if和fi是条件语句的语句括号,必须成对使用;命令表中的命令可以是一个,也可以是多个。 #! /bin/bashif [ $# -ne 1 ]然后echo ‘usage : $0 filename’ exitfiif ! [ -e $1 ]然后echo ‘$1 不存在’ exitfi if [ -d $1 ]then echo ‘$1 是一个目录’fi
if.then .else.fi 语句结构为:
if 表达式then 命令表1else 命令表2fi 如果表达式为true,则执行命令表1 中的命令,并退出if 语句;否则,执行命令表2中的语句并退出if语句。
注意:无论表达式是否为真,都有语句要执行
#! /bin/bashif [ $# -ne 1 ]然后echo ‘usage : $0 filename’ exitfiif ! [ -e $1 ]然后echo ‘ $1 不存在’ exitfi if [ -L $1 ]then echo ‘l’elif [ -d $1 ]then echo ‘-‘elif [ -b $1 ]then echo ‘b’else echo ‘csp ‘菲
2. 多路分支语句
==case.esac==多路分支语句case用于多条件测试,语法结构清晰自然。
case string variable in //case语句只能检测字符串变量mode 1) command list 1 //每次模拟中可用的文件名元字符,以右括号结尾;模式2 |模式3) 命令列表2; //命令表以单独的双分号行结束,退出case语句.模式n)命令表n; //模式n常写为字符*,表示所有其他模式esac //最后的双分号行可以省略,以确定选择—— 多路分支语句示例1:
#! /bin/bashecho -n ‘请选择(是|否)? ‘在yes 中读取Rcase $R |是|y | Y |YES ) echo ‘是’;不)回显’不’; *) echo ‘错误’ #;esac
判断分数——多路分支语句例2:
#! /bin/bashecho -n ‘请选择(是|否)? ‘读Sif [ $S -lt 0 -o $S -gt 100]然后echo ‘no in [0-100]’exit fiG=`expr $S/10`case $G in9|10) echo ‘$S A ‘ ; 6|7|8)echo ‘$S B’;*)echo ‘$S C’#;esac
四、shell 循环语句
1. 循环语句for的用法
当循环次数已知或确定时,使用for循环语句多次执行一个或一组命令。循环体由语句括号do 和done 定义。
格式为:
for 单词列表中的变量名称do 命令列表did 该变量按顺序获取单词列表中的每个单词。每取一个字,就会执行循环体中的命令。循环次数由单词数决定。命令表中的命令可以是一条或多条命令,以分号或换行符分隔。如果单词列表都是命令行上的位置参数,则可以使用for
示例代码:
#! /bin/bash#for I in `ls /etc`do echo ‘$I’done
==seq命令==:列出一系列数字seq起始数字中间成分结束成分
#!/bin/bashfor I in `seq 1 2 10`do echo ‘$I’done
示例:将当前目录下的所有文件复制到备份子目录中。使用语法为:/prog5.sh[文件名]
#for .do.doneif 的语句[! -d $HOME/backup ]then mkdir $HOME/backupfiflist=`ls`for file in $flist //flist的值为ls的执行结果,即当前目录中的文件名do if [ $#=1 ] then if [ $1=$file ] //当命令行有参数时,则echo ‘$file found’ ; exit fi else cp $file $HOME/backup echo ‘ $file Copy’ fidoneecho ***备份完成******
2. 循环语句while的用法
语法结构:
while 命令或表达式do 命令表didwhile 语句首先测试后续命令或表达式的值。如果为true,则执行循环体中的命令一次,然后测试命令或表达式的值并执行循环体。退出循环,直到命令或表达式为false。
例子:
#! /bin/bashI=0while [ $I -lt 5 ] //-lt=do I=`expr $I + 1` echo -n ‘input Score:’ 读取$S case `expr $S/10` in 9|10 ) 回显’A’; 6|7|8) 回显’B’; *)回显“C”; esac echo ‘$I’done
3. 循环控制语句
==中断并继续==
break n 会跳出n层; continue 语句将立即进入最近一级循环语句的下一个循环,而continue n 将进入最近n 级循环语句的下一个循环。
用法:prog7 整数整数整数. 参数个数不确定,范围从1到10,每个参数都是正整数。
例子:
#! /bin/bashif [ $# -ne 5 ] then echo ‘argument 5’ exitfifor Ido if [ `expr $I % 2` -eq 1 ] then echo ‘$I’ else break fidone 如果break,则跳出整个循环。当遇到偶数时跳出循环。
#! /bin/bashif [ $# -ne 5 ]then echo ‘argument 5’exitfifor Idoif [ `expr $I % 2` -eq 1 ]thenecho ‘$I’elsecontinuefidone
如果是continue 则跳出当前循环。当遇到偶数时,跳出当前循环,继续执行下面的语句
五、shell 函数
1. shell函数调用
函数调用格式:
方法一:value_name=`function_name [arg1 arg2.]`函数的所有标准输出都传递给主程序的变量
方法2: function_name [arg1 arg2 .]echo $?获取函数的返回状态
获取函数—— 的返回状态示例:
grep_user(){ R=`grep ‘$1’ /etc/passwd | wc -l` echo $R return $R}echo -n ‘输入用户名:’读取USERgrep_user $USERRET=$?if [ $USER -eq 1 ]then echo ‘$USER 存在’else echo ‘$USER 不存在’fi
如果改成不返回值并使用变量,那么函数的所有标准输出都会传递给主程序的变量。
grep_user(){R=`grep ‘$1’ /etc/passwd | grep_user(){R=`grep ‘$1’ /etc/passwd | wc -l`echo $R}echo -n ‘输入用户名:’读取USERRET=`grep_user $USER`echo ‘—-return $RET– —‘if [ $USER -eq 1 ]then echo ‘$ USER 存在’elseecho ‘$USER 不存在’fi
2. 函数变量作用域
全局作用域:该变量可以在脚本中的其他任何地方访问grep_user(){ B=200 A=100} grep_userecho ‘end: $A-$B’ 原来函数中的变量竟然是全局的变量
如果我们想要局部变量,请添加一个局部变量
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112906.html
用户评论
把孤独喂饱
学习Linux基础shell编程真的很实用!现在很多服务器都是基于Linux的,掌握一些基本的脚本语言可以大大提升工作效率。这篇文章讲解的很透彻,我已经开始尝试写简单的脚本了,感觉很有成就感。
有18位网友表示赞同!
箜明
Shell编程对我来说还是有点抽象,看不懂那些英文指令和符号头疼啊。也许是理解能力有问题吧,希望作者能多拍一些图文并茂的教學视频!
有8位网友表示赞同!
眷恋
Linux基础shell编程真是一门入门的门槛,很多人刚接触linux就卡在了这一步。这篇文章讲解的非常详细,对于新手的我来说很有帮助,希望能学到更多高级技巧。
有20位网友表示赞同!
别悲哀
写的太简单了,完全不符合实际应用场景!我想了解如何利用Shell自动化处理日常任务,而不是只会基础语法的那种内容!
有14位网友表示赞同!
花花世界总是那么虚伪﹌
这个标题很有吸引力啊,《Linux基础shell编程》,学习linux必不可少的技能啊!现在很多岗位都要求掌握shell编程基础,以后说不定有机会能用这些知识在工作中加分!
有17位网友表示赞同!
莫失莫忘
其实我觉得这篇文章只是一种入门级的引导,想要真正的精通shell编程,还需要通过实际项目实践来积累经验。 而且Shell本身语言功能比较有限,想处理复杂逻辑还是要考虑其他更强大的编程语言。
有10位网友表示赞同!
非想
学习Linux基础shell编程确实可以提高系统管理员的效率!我现在主要用它来执行一些重复性的任务,比如备份文件、日志处理等等,省时省力效果显著。
有10位网友表示赞同!
反正是我
有没有人推荐一本好用的shell脚本编写书籍?我觉得这篇文章讲解的基础知识比较有限,想要深入学习还需要更多的参考材料。
有13位网友表示赞同!
未来未必来
我之前对linux就一点了解都没有,今天看了这篇文章,开始对Shell编程有了初步的认识,感觉很有意思!看来要花点时间好好学习了。
有10位网友表示赞同!
志平
这篇文章介绍的是Linux基础shell编程吧? 我听很多IT从业者都在说这个很重要,想了解一下具体内容是什么,看看能不能学习学到提高工作效率的技能!
有13位网友表示赞同!
凉城°
作者讲解逻辑清晰,语言简洁易懂,适合对Shell编程不了解的人学习入门。 但如果想要深入研究Shell编程的技巧和应用,还需要寻找更权威的教材进行补充学习。
有14位网友表示赞同!
逃避
Linux系统使用频率越来越高了,掌握基础Linux shell编程技能对于IT从业者来说是必不可少的。这篇文章刚好填补了我这方面的知识空白!
有19位网友表示赞同!
一笑抵千言
shell脚本语言真的是太强大啦! 不用图形界面,就能通过命令行完成各种操作,简直是黑客和程序员的好帮手!想要学习一下更高级的Shell编程技巧,请问哪里有书籍推荐?
有14位网友表示赞同!
巷口酒肆
希望这篇文章能多分享一些实际应用案例,这样对我们学习Linux基础shell编程更容易理解和记忆。
有8位网友表示赞同!
代价是折磨╳
我一直听说Linux系统很强大,很多核心技术都基于linux平台,我想了解一下Shell编程相关的知识点,看来这篇文章让我更早一步认识到shell的重要性!
有17位网友表示赞同!
杰克
我觉得写shell脚本太麻烦了,各种语法规则记不清,不如用图形界面操作简单高效!当然,我承认shell编程的威力不可忽視。也许以后有机会再好好学习学它。
有9位网友表示赞同!
在哪跌倒こ就在哪躺下
这篇文章讲解得挺细致的,对于想入门Linux基础shell编程的人来说,是很好的入门指南。 我已经开始尝试写一些简单的脚本了,发现确实可以提高工作效率!
有13位网友表示赞同!
长裙绿衣
我对Linux系统比较熟悉,但对Shell编程还不太了解。 这篇文章介绍得很不错,虽然是基础内容,但也让我对Shell编程有了更深的认识。我觉得下一步应该学习一些高级技巧和常用工具的使用方法!
有9位网友表示赞同!