第四天
复习昨天的内容:
PATH存放的是shell命令的默认搜索路径
PATH=内容
PATH=$PATH:路径
export PATH
export PATH=$PATH:路径 <==> export PATH=路径:$PATH
以上方法都是临时生效。
永久生效:vi /etc/配置文件 添加export PATH=$PATH:路径
ps -ef
df 磁盘的使用情况
文件系统基本概念:用来给用户描述磁盘中的二进制信息,并且给用户提供交互接口。
磁盘文件系统ext4 ntfs、网络文件系统nfs、虚拟文件系统vfs
/bin /sbin
/etc
/dev
/mnt 通常作为挂载点
/lib /usr/lib 存放库文件
/usr/include 存放头文件
/root 代表了超级用户
/sys
/proc
sudo fdisk -l 查看磁盘分区
sda1
一个磁盘最多4个主分区,一般情况磁盘被分成若干个主分区和若干逻辑分区
sudo mount /dev/sdb1 /mnt
ln命令
硬链接:ln 路径/源文件 路径/目标文件
软链接:ln -s 路径/源文件 路径/目标文件
以后要想知道一些文件是否独立占用空间,只需要查看每个文件的inode节点号
tftp和nfs
tftp叫做简单文件传输协议。本身功能用来上传或者下载文件(除了目录文件)的。
后面要使用tftp将pc机和开发板建立联系。
uImage xxx.dtb ramdisk.img 都是二进制文件
开发板要从ubuntu中下载这些文件到开发板的内存中运行,最终会在开发板中看到文件系统。
如果工作中需要调试,我们不可能直接选择.img文件,我们选择的是一个可以被挂载到开发板上的文件夹,
这个文件夹内部存放的内容是文件系统。通过nfs网络文件系统将ubuntu中的/rootfs文件夹挂载到开发板上。
今天的内容:
PATH=内容
PATH=$PATH:路径
export PATH
export PATH=$PATH:路径 <==> export PATH=路径:$PATH
以上方法都是临时生效。
永久生效:vi /etc/配置文件 添加export PATH=$PATH:路径
ps -ef
df 磁盘的使用情况
文件系统基本概念:用来给用户描述磁盘中的二进制信息,并且给用户提供交互接口。
磁盘文件系统ext4 ntfs、网络文件系统nfs、虚拟文件系统vfs
/bin /sbin
/etc
/dev
/mnt 通常作为挂载点
/lib /usr/lib 存放库文件
/usr/include 存放头文件
/root 代表了超级用户
/sys
/proc
sudo fdisk -l 查看磁盘分区
sda1
一个磁盘最多4个主分区,一般情况磁盘被分成若干个主分区和若干逻辑分区
sudo mount /dev/sdb1 /mnt
ln命令
硬链接:ln 路径/源文件 路径/目标文件
软链接:ln -s 路径/源文件 路径/目标文件
以后要想知道一些文件是否独立占用空间,只需要查看每个文件的inode节点号
tftp和nfs
tftp叫做简单文件传输协议。本身功能用来上传或者下载文件(除了目录文件)的。
后面要使用tftp将pc机和开发板建立联系。
uImage xxx.dtb ramdisk.img 都是二进制文件
开发板要从ubuntu中下载这些文件到开发板的内存中运行,最终会在开发板中看到文件系统。
如果工作中需要调试,我们不可能直接选择.img文件,我们选择的是一个可以被挂载到开发板上的文件夹,
这个文件夹内部存放的内容是文件系统。通过nfs网络文件系统将ubuntu中的/rootfs文件夹挂载到开发板上。
今天的内容:
shell脚本:
shell脚本的本质是一系列shell命令的有序集合,同时这些有序集合要存放到一个文件中。
脚本文件一般情况下是以.sh为后缀的。
c语言要想执行,先编译。
脚本是解释型语言,解释器来翻译解释型语言。
解释器:bash sh ksh csh dash ......
执行脚本方法:
1、bash xxx.sh
2、chmod 777 xxx.sh
./xxx.sh
创建了子脚本,子脚本去运行返回结果给原有脚本
3、source xxx.sh
4、. ./xxx.sh
直接执行脚本本身
正常情况下,每个脚本文件的第一行都会指定使用哪种命令行解释器,#!/bin/解释器
如果单独使用#代表了注释。
脚本变量:
自定义变量:
定义时没有所谓的类型,同时定义和初始化要同时进行。
变量的赋值中=左边和右边不能有空格,如果必须要在=的右边加空格,那么字符串的外围加"",引用变量时加""
echo $a <==> echo ${a}
环境变量:PATH HOME
位置变量:$0代表脚本文件名 $1.... $9 ... $n $#代表参数的个数(不包括脚本文件名)
代表了给脚本传递的参数
表达式:
string=ABCDEFABCDEFABCD
${string/BCD/xy} 将变量string中的第一个BCD替换成xy
${string//BCD/xy} 变量string中所有的BCD都被替换成xy
${string/#ABCD/xy} 将字符串的头替换成xy,如果ABCD不是头则原样输出
${string/%ABCD/xy} 如果ABCD是字符串的尾部,则替换成xy
${string:3} 去掉前面3个字符
${string:3:5} 从第四个开始取出5个字符
${string#AB} 去掉字符串的头
${string#AB*E} 去掉从头开始到第一个E的部分
${string##AB*E} 去掉从头开始到最后一个E的部分
${string%EF*} 去掉的是从最后一个EF开始后面所有的字符
${string%%EF*} 去掉的是从第一个EF开始后面所有的字符
例子:
从终端输入一个字符串。
判断这个字符串是不是一个普通文件。
如果不是普通文件,打印"这不是一个普通文件"
如果是一个普通文件,提示一句话:"输入yes删除,输入no退出程序,输入的不是yes也不是no提示输入错误"
#!/bin/bash
echo -n "请输入一个文件:"
read fname
if [ ! -e $fname ]
then
echo "文件不存在"
exit
fi
if [ -f $fname ]
then
echo "输入yes删除文件,输入no保留文件"
read ans
if [ $ans = yes ]
then
rm $fname
else if [ $ans = no ]
then
exit
else
echo "选择错误"
exit
fi
fi
else
echo "不是普通文件"
fi
int a = 1;
switch(a)
{
case 1:
printf();
case 2:
printf();
case 3:
case 4:
语句块;
default:
printf();
}
case 变量引用 in
模式1)
命令表1
;;
模式2)
命令表2
;;
模式3)
模式4)
命令表4
;;
//上面的模式3和模式4写法是错误的,但是也有替代方法
模式3 | 模式3)
命令表4
;;
*) 相当于是c中default
命令表3
;;
esac
循环语句:while for until
for(i = 0;i < 5;i ++)
for 变量定义 in 变量引用(单词表)
do
done