格式化sd 卡linux 脚本学习
2016-04-13 11:35
357 查看
#!/bin/sh
umount /mnt/mmc/ 2>&- 1>&-
if [ $? != 0 ]; then
echo "umount /mnt/mmc/ $?"
fi
mkfs.fat /dev/mmcblk0p1 2>&- 1>&-
if [ $? != 0 ]; then
echo "mkfs.fat $?"
fi
mount /dev/mmcblk0p1 /mnt/mmc 2>&- 1>&-
if [ $? != 0 ]; then
echo "mount $?"
fi
#file end
echo $? 就是输出上次脚本的退出码。如果是0说明上次脚本执行成功,如果非0说明上次脚本执行失败。
这个2>&- 1>&-又是什么意思呢?
转载一篇文章 来自 http://blog.csdn.net/astonqa/article/details/8252791
1、首先,bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
2、输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test.c 将test.c重定向为cat命令的输入源。输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls > 1.txt将ls的结果从标准输出重定向为1.txt文本。有时候会看到如 ls >> 1.txt这类的写法,> 和 >> 的区别在于:> 用于新建而>>用于追加。即ls > 1.txt会新建一个1.txt文件并且将ls的内容输出到新建的1.txt中,而ls
>> 1.txt则用在1.txt已经存在,而我们只是想将ls的内容追加到1.txt文本中的时候。
3、默认输入只有一个(0,STDIN_FILENO),而默认输出有两个(标准输出1 STDOUT_FILENO,标准错误2 STDERR_FILENO)。因此默认情况下,shell输出的错误信息会被输出到2,而普通输出信息会输出到1。但是某些情况下,我们希望在一个终端下看到所有的信息(包括标准输出信息和错误信息),要怎么办呢?
对了,你可以使用我们上面讲到的输出重定向。思路有了,怎么写呢? 非常直观的想法就是2>1(将2重定向到1嘛),行不行呢?试一试就知道了。我们进行以下测试步骤:
1)mkdir test && cd test ; 创建test文件夹并进入test目录
2)touch a.txt b.c c ; 创建a.txt b.c c 三个文件
3)ls > 1 ; 按我们的猜测,这句应该是将ls的结果重定向到标准输出,因此效果和直接ls应该一样。但是实际这句执行后,标准输出中并没有任何信息。
4)ls ; 执行3之后再次ls,则会看到test文件夹中多了一个文件1
5)cat 1 ; 查看文件1的内容,实际结果为:1 a.txt b.c c 可见步骤3中 ls > 1并不是将ls的结果重定向为标准输出,而是将结果重定向到了一个文件1中。即1在此处不被解释为STDOUT_FILENO,而是文件1。
4、到了此时,你应该也能猜到2>&1的用意了。不错,2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。
不过貌似还是不能解释2>&- 1>&- 这个是什么
再百度2>&- 发现问题了,如下:
是IO重定向 关闭标准输入和错误输出
>& n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
<& n 标准输入复制自文件描述符 n;
<& - 关闭标准输入(键盘);
>& - 关闭标准输出;
n<&- 表示将 n 号输入关闭;
n>&- 表示将 n 号输出关闭;
exec 1>outfilename # 打开文件outfilename作为stdout。
exec 2>errfilename # 打开文件errfilename作为 stderr。
exec 0<&- # 关闭 标准输入。
exec 1>&- # 关闭 标准输出。
exec 2>&- # 关闭 错误输出。
umount /mnt/mmc/ 2>&- 1>&-
if [ $? != 0 ]; then
echo "umount /mnt/mmc/ $?"
fi
mkfs.fat /dev/mmcblk0p1 2>&- 1>&-
if [ $? != 0 ]; then
echo "mkfs.fat $?"
fi
mount /dev/mmcblk0p1 /mnt/mmc 2>&- 1>&-
if [ $? != 0 ]; then
echo "mount $?"
fi
#file end
echo $? 就是输出上次脚本的退出码。如果是0说明上次脚本执行成功,如果非0说明上次脚本执行失败。
这个2>&- 1>&-又是什么意思呢?
转载一篇文章 来自 http://blog.csdn.net/astonqa/article/details/8252791
1、首先,bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
2、输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test.c 将test.c重定向为cat命令的输入源。输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls > 1.txt将ls的结果从标准输出重定向为1.txt文本。有时候会看到如 ls >> 1.txt这类的写法,> 和 >> 的区别在于:> 用于新建而>>用于追加。即ls > 1.txt会新建一个1.txt文件并且将ls的内容输出到新建的1.txt中,而ls
>> 1.txt则用在1.txt已经存在,而我们只是想将ls的内容追加到1.txt文本中的时候。
3、默认输入只有一个(0,STDIN_FILENO),而默认输出有两个(标准输出1 STDOUT_FILENO,标准错误2 STDERR_FILENO)。因此默认情况下,shell输出的错误信息会被输出到2,而普通输出信息会输出到1。但是某些情况下,我们希望在一个终端下看到所有的信息(包括标准输出信息和错误信息),要怎么办呢?
对了,你可以使用我们上面讲到的输出重定向。思路有了,怎么写呢? 非常直观的想法就是2>1(将2重定向到1嘛),行不行呢?试一试就知道了。我们进行以下测试步骤:
1)mkdir test && cd test ; 创建test文件夹并进入test目录
2)touch a.txt b.c c ; 创建a.txt b.c c 三个文件
3)ls > 1 ; 按我们的猜测,这句应该是将ls的结果重定向到标准输出,因此效果和直接ls应该一样。但是实际这句执行后,标准输出中并没有任何信息。
4)ls ; 执行3之后再次ls,则会看到test文件夹中多了一个文件1
5)cat 1 ; 查看文件1的内容,实际结果为:1 a.txt b.c c 可见步骤3中 ls > 1并不是将ls的结果重定向为标准输出,而是将结果重定向到了一个文件1中。即1在此处不被解释为STDOUT_FILENO,而是文件1。
4、到了此时,你应该也能猜到2>&1的用意了。不错,2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。
不过貌似还是不能解释2>&- 1>&- 这个是什么
再百度2>&- 发现问题了,如下:
是IO重定向 关闭标准输入和错误输出
>& n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
<& n 标准输入复制自文件描述符 n;
<& - 关闭标准输入(键盘);
>& - 关闭标准输出;
n<&- 表示将 n 号输入关闭;
n>&- 表示将 n 号输出关闭;
exec 1>outfilename # 打开文件outfilename作为stdout。
exec 2>errfilename # 打开文件errfilename作为 stderr。
exec 0<&- # 关闭 标准输入。
exec 1>&- # 关闭 标准输出。
exec 2>&- # 关闭 错误输出。
相关文章推荐
- centos6.5 用户管理
- 【uniq】报告重复的行(在linux中系统认为只有相邻并且一摸一样的行才认为是从复的行)
- Jenkins创建slave节点----Linux平台
- linux 设置环境变量
- 建站_主机的区别(windows和linux)
- CentOS 6.5 e1000e Timesync Tx Control register not set as expected
- CentOS 6.5下Samba服务器的安装与配置
- linux 文件权限——文件系统的文件及文件夹的权限管理标准详尽
- Linux 的 NUMA 技术
- 近期用到的linux命令
- linux下bus,device,driver三者关系
- linux内核中的get_user和put_user
- linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析(引用)
- Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
- linux下ntp服务端配置问题
- Ubuntu Linux 12.04 LTS amd64系统本地root提权
- linux监控之cacti
- 修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
- linux CTRL+Z
- DragonBoard 410c手把手Linux开发