ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第三周学习笔记

2021-09-26 21:02:50  阅读:150  来源: 互联网

标签:变量 第三周 笔记 echo 学习 命令 sh eval 执行



1.sh脚本
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
当编写脚本完成时,如果要执行该脚本,还必须使其可执行。
要使编写脚本可执行:
#!/bin /bash
#comment line
echo hello
编译 chmod +x filename 这样才能用./filename 来运行

2、注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。

3.命令行参数
$#=命令行参数$1到$n的数量
$*=所有命令行参数,包括$0
$S=执行sh的进程PID
$?=最后一个命令执行的退出状态(如果成功为0,反之为1。与C语言不一致)

4、sh变量
在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明。要赋值给一个变量,可以这样写:
#!/bin/sh
#对变量赋值:
a=”hello world”
现在打印变量A的内容:
echo “A is:”
echo $a
有时候变量名很容易与其他文字混淆,比如:
num=2
echo “this is the $numnd”
这并不会打印出”this is the 2nd”,而仅仅打印”this is the “,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
num=2
echo “this is the ${num}nd”
这将打印: this is the 2nd

5.sh命令
sh有许多内置命令,这些命令由sh执行
,file:读取并执行文件
break[n]:从最近的第n个嵌套循环中退出
cd[dirname]:更换目录
continue[n]:重启最近的第n个嵌套循环
eval[arg...]:计算一次参数并让sh执行生成的命令
exec[arg...]:通过这个sh执行命令,sh将会退出
exit[n]:使sh退出,退出状态为n
read命令:当sh执行read命令时,它会等待来自stdin的输入行,它将输入行划分为几个标记,分配给列出的变量。

6.Linux命令
echo命令:echo只是将参数字符串作为行回显到stdout。通常将相邻的多个空格压缩为一个空格,除非有引号。

 

 

 

 

 

expr命令:因为所有的sh变量都是字符串,所以我们不能将之直接改为数值。以下是按照C语言格式直接操作的结果和按照shell脚本标准操作的结果对比

 

 

 

 

 

 

 

 

 

 


expr是一个程序,它的运行方式如下:
expr string1 OP string2

7.sh函数
sh函数的定义为:
func()
{
#function code
}
由于sh逐行执行命令,所以必须在任何可执行语句之前定义sh脚本中的所有函数。与C语言不同,在sh脚本中无法声明函数原型。sh函数的调用方式与sh脚本文件的执行方式完全相同。
调用sh函数,以参数(字符串)形式传递s1~sn。在被调函数中,参数被引用为$0、$1到$n。通常,$0是函数名,$1到 $n是与命令行参数对应的位置参数。函数执行结束时,$?表示其退出状态,如果成功,状态为0,否则,状态为非0。$?值可用函数的显式返回值进行更改。但是,为了测试S$?的最后一次执行,必须将其分配给一个变量,然后测试该变量。

8.sh中的通配符
星号通配符
file *:列出当前目录中所有文件的信息
ls *.c:列出当前目录中所有以.c结尾的文件
问号通配符

file ??:有3个字符的所有文件名
ls *.??: .后有2个字符的所有文件名
[]通配符

file [ab]:包含字符a或b的所有文件名
ls [xyz]:列出所有包含x、y或z的文件名
ls [a-m]:列出包含a到m范围内字符的所有文件名
9.命令分组
在sh脚本中,可以用{}或()对命令进行分组。
{ls;mkdir abc;ls;}:通过当前sh执行中的命令列表。命令分组的唯一用处是在相同环境下执行这些命令,例如,为分组中的所有命令重定向L/O。
更有用的命令分组是(),由subsh(进程)执行。
(cd newdir;ls;A=value;mkdir $A):通过subsh进程执行()中的命令。subsh进程可在不影响父sh的情况下更改其工作目录。此外,当subsh进程终止时,subsh中的任何赋值变量都不起作用。

10.eval语句
eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。

eval也可以用于回显简单变量,不一定是复杂变量。
var="TangQiheng"
echo $var
eval echo $var
eval $var 等价于echo $var

eval进行二次扫描
eval $var或eval 'echo $var'或eval $(echo $var)
上述命令等价,可以知道第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令.

11.调试sh脚本
sh脚本可由带有-x选项的子sh运行,以进行调试,如:
bash -x mysh
子sh将在执行命令之前显示要执行的每个sh命令,包括变量和命令替换。它允许用户跟踪命令执行。如果出现错误,sh将在错误行上停止并显示错误消息。

标签:变量,第三周,笔记,echo,学习,命令,sh,eval,执行
来源: https://www.cnblogs.com/l993316381-/p/15340027.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有