嵌入式linux系统c高级课程笔记u
2023/3/20 来源:不详 浏览次数:次北京白癜风医院 http://disease.39.net/bjzkbdfyy/171015/5762961.html
Linux系统及C高级
什么是shell
shell它是命令行解析器。
(1)sh:(全称BourneShell)是UNIX最初使用的shell,
而且在每种UNIX上都可以使用。BourneShell在shell
编程方面相当优秀,但在处理与用户的交互方面做得不如
其他几种shell。
(2)csh:是一种比BourneShell更适合的变种Shell,
它的语法与C语言很相似
(3)ksh:集合了CShell和BourneShell的优点并且
和BourneShell完全兼容。
(4)bash:LinuxOS默认的,它是BourneShell的扩展。
与BourneShell完全兼容,并且在BourneShell的基
础上增加了很多特性。可以提供命令补全,命令编辑和命
令历史等功能。它还包含了很多CShell和KornShell
中的优点,有灵活和强大的编辑接口,
同时又很友好的用户界面
什么是shell脚本
它本身是一个以sh结尾的文件。在这个文件中就是命令的
集合以及一些复杂的逻辑语句。
#!/bin/bash
作用:指定解析这个脚本文件的解析器是bash
练习:
1.在自己的用户主目录下新建两个子目录subdir1subdir2
2.将/etc/passwd文件拷贝到subdir1,将/etc/group拷贝到subdir2
3.将subdir2重命名为subdir
4.对subdir1进行打包并且压缩成xz格式
5.将打包后的xz格式文件移动到subdir目录下
6.解压subidr目录下的压缩格式文件
7.查看subidr目录下所有的文件
shell脚本是否需要编译?
shell脚本文件是不需要进行编译的,原因是
shell是一种解析语句
如何执行shell脚本?
./脚本名(chmod脚本名.sh)
bash脚本名
source脚本名
上述三者执行脚本的时候的区别?
1../执行脚本的时候需要权限,
bash/source执行脚本的时候不需要权限
2../和bash在执行脚本的时候,系统会自动新开一个
子终端,子终端我们看不到,在子终端执行完之后,将
执行的结果返回给当前终端。source解析脚本的时候
是在当前终端解析的。
shell中变量
在shell中变量不需要定义,也没有数据类型,直接使用即可。
shell中的变量的变量名和c语言类似。
1.不能和shell中的关键字重复
testifwhileechocat
2.变量名一般写成大写的
3.变量名命名格式数字,字母,下划线,
不能以数组作为开头
变量引用?
$变量名或者${变量名}
$()错误的用法
变量赋值?
变量再被赋值的时候,都是字符串,就没有
整形,字符型,字符串类型,浮点类型之分
VAR1=helloworld(一句话结束不需要向c一样加;)
VAR2=helloworld$VAR1
VAR3=helloworld$VAR1
注意:
1.在赋值的时候=前后不允许有空格
2.如果在赋值的时候没有或,赋值的字符串是不允许有空格的
3.在赋值的时候,可以有空格,但是不能够引用变量
4.在赋值的时候,可以有空格,也能够引用变量,可以识别转译字符
echo命令:
echo$变量名
#打印变量的内容并会加上换行
echo-n$变量名
#打印变量的内容,不会加上换行
echo-e$变量名
#打印变量的内容并会解析转译字符\n
shell中的注释:
#单行注释
:EOF
被注释掉的多行
EOF
:!
被注释掉的多行
!
练习:
使用两个变量去承接HOME和PATH的值
将上述的两个变量交换,并将交换后
的内容显示出来
清除变量?
unset变量名#(注意不能再变量前加$)
位置变量?
$0$1$2$3...$9${n}
如果在执行脚本的时候使用的是./
$0=./05var.sh
如果在执行脚本的时候使用的是bash
$0=05var.sh
如果在执行脚本的时候使用的是source
$0=bash
$1:命令行的第一个参数
$2:命令行的第二个参数
...
$
和$*命令行中所有参数的内容,不包含文件名$#命令行参数的个数,这个值不包含文件名这个成员
$?:1.程序上一步执行的结果,如果是0,表示执行成功了
如果是1,表示执行失败了。
2.可以用来获取shell中函数的返回值
$$:获取执行这个脚本时候的进程号(ps-aux)
变量的作用域问题?
local变量名
如果变量前不加local,默认的就是全局变量,
如果添加了local只在{}内部有效
只读变量?
readonly变量名=初值
只读变量一定要赋初值,否则无意义。
给变量赋值命令的结果?
VAR1=`ls`(注意这不是单引号,是~对应的符号)
VAR2=$(ls)
注意上面:``或者$()这叫做命令置换