Chinaunix首页 | 论坛 | 博客
  • 博客访问: 686261
  • 博文数量: 152
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1793
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 12:26
个人简介

相信自己,只有不想做的,没有做不到的。

文章分类

全部博文(152)

文章存档

2021年(1)

2015年(2)

2014年(74)

2013年(75)

分类: LINUX

2014-01-18 10:17:03

认识shell

    随着格式linux系统的图像化程序的不断提高,用户在桌面环境下,通过点击,拖拽等操作就可以完成大部分的工作。然而,许多ubuntu linux功能使用shell命令来实现,要比使用图形界面交互,完成的更快,更直接。也可以这样认为,linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互。

    命令是用户向系统内核发出控制请求,与之交互的文本流,shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的区别。同时shell为操作系统提供了内核之上的功能,直接用来管理和运行系统。当需要重复执行若干命令,可以将这些命令集合起来,加入一定的控制语句,编辑成为shell脚本文件,交给shell批量执行、

    用户在命令行提示符下键入命令文本,开始于shel进行校核,接着,shell讲用户的命令或按键转化成内核所能够理解的指令。操作系统做出响应,直到控制相关硬件设备。最后,shell将结果交给用户。

通配符
星号(*)                 匹配任意长度的字符串                       file_*.txt
问号(?)                匹配一个长度的字符                          file_?.txt
方括号([...])           匹配其中指定的一个字符                    file[otr].txt
方括号([-])             匹配指定的一个字符范围                    file[a-z].txt
方括号([^...])            除了其中指定的字符,均可匹配           file[^otr].txt

> file              将file文件重定向为输出源,新建模式
>>file             将file文件重定向为输出源吗,追加模式
2>或&>           将由命令产生的错误信息输入到

定义变量
count=1    变量赋值
echo $count  输出变量的值
unset     命令删除变量的赋值

$0             脚本名
$1--$9       命令行参数 
$#            包含命令行参数的个数
$a  $*       包含所有命令行的参数
$?            保存前一条命令的退出状态
$$            包含正在执行的进程ID

expr   
算术运算命令 +     -     \*     /
num=9
sum=`expr    $num \* 6`
echo    $sum
54

test

test语句可测试三种对象:字符串,整数,文件属性。
test "$answer" = "yes"    字符串比较
test    $num -eq 18        num的值是否为18
test     -d    tmp            tmp是否为一个目录名

s1 = s2     测试    s1,s2   是否相等
s1 != s2    测试    s1,s2    是否有差异
-z  s1        测试s1的长度为0
-n  s1        测试s1的长度的不为0

文件属性
-d    name    测试是否是目录
-f    name    测试是否是文件
-L    name    测试是否是符号链接
-r    name     测试是否可读
-w    name    测试是否可写
-x   name      测试是否可执行  
-s    name    是否存在且长度不为0
f1    -nt    f2    f1是否比f2更新
f1    -ot    f2    f1是否比f2更旧

tput命令
主要用于设置终端工作模式或读出终端字符。

shell编程的调试语法
主要用于:条件测试语句(两路分支),多路分支语句,循环语句,循环控制语句,后台执行语句。

1,条件测试语句(两路分支
if    表达式      
then    
    命令表    
fi


if    表达式    
then    
    命令表    
else
    命令表

fi

2,多路分支
case    字符串变量    in
模式    1)
    命令表1
    ;;
模式    2)
    命令表2
;;
easc

3,循环语句

for    变量名    in    单词表  //变量依次取单词的各个单词,每次取一次单词,就执行循环体中的命令,循环次数由单词表中的单词数决定。
do
    命令表
done

while    命令或表达式   //while语句首先测试其后的命令或表达式的值,如果为真,就执行一次,知道该命令或表达式为假时退出循环
do    
    命令表
done

until     命令或表达式    //until语句首先测试其后的命令或表达式的值,如果为假,就执行一次,知道该命令或表达式为真时退出循环,与while相反
do
    命令表
done

循环控制语句
break    n    跳出n层
continue  ,continue    n    马上转到最近n层循环语句的下一轮循环上

shell函数
函数定义格式
方式一:
        function_name()
{
        ...
    command.
}
方式二:
function   funtion_name()
{
        ...
    command.
}

函数调用格式
方式一    
    value_name =  funtion_name[arg1,arg2,...] //函数所有返回状态赋值给变量

方式二  
     funtion_name[arg1,arg2,...]        
    echo $?            //获得函数返回的状态

函数变量的作用域
全局作用域:做标本的其他任何地方都能访问
局部作用域:只能在声明变量的作用域内访问
声明局部变量格式:local    variable_name = value;


shell编程的调试方法
调试方法:
    分析输出信息
    加调试信息
    利用调试工具


以上就是对shell的理解与分析,懂得了以上这些shell的脚本在去看开发板的编译过程,是如何先编译uboot,接着kernel,rootfs,都是通过shell脚本来实现这一连串的命令操作。

阅读(593) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~