嵌入式第十三天

复习:
用户管理:
sudo adduser u1 
sudo userdel -r u1

硬链接
软链接

ln 源文件 链接文件
ln -s 源文件 链接文件

重定向
标准输入-键盘
标准输出-屏幕
标准错误输出-屏幕
>file 
>>file
2>file 

ifconfig eth0 ip  
ping 

sudo shutdown -r +30
sudo reboot 

tar cvfz 包 被压缩
tar xvfz 包 -C 路径 

tar cvfj 
    xvfj
    
umask 000    

一、shell 
1.shell脚本后缀名.sh 
2.执行脚本:
(1)
    chmod a+x ex1.sh 
    ./ex1.sh
(2)bash ex1.sh //bash是shell脚本解释器

3.注释
    #!/bin/bash  #告诉终端 执行这个脚本使用你哪个shell解释器 默认bash
    
    #是注释 可以注释一行
    mkdir happy
    cd happy 
    touch tmp 
    ls
    mkdir happy
    cd happy 
    touch tmp 
    ls

4.脚本里可以定义变量 可以使用环境变量
///
    #!/bin/bash  #告诉终端 执行这个脚本使用你哪个shell解释器 默认bash
    NAME="yang"
    echo $NAME

    NAME1=$NAME
    echo $NAME1

    echo "name is  $NAME"  #不完全输出 如果双引号里边有变量 那么输出变量的值
    echo 'name is $NAME'  #完全输出 如果但引号里边有变量 则输出变量名

    使用变量需要注意:
    a、shell中变量名尽量大写
    b、=两边步可以加空格 
    c、变量赋值都是字符串 赋值直接定义就可以
    
练习:创建一个目录 目录中创建文件 显示目录中文件
    //vi a.sh 
    #!/bin/bash 
    mkdir aa
    cd aa
    touch file
    cd ..
    ls aa

    //chmod a+x a.sh 
    //./a.sh 

5.系统预设变量 $0,$1,$2 ....$#,$*
    $0 保存脚本名称
    $1 保存第一个选项参数
    $2 保存第二个选项参数
    $3 保存第三个选项参数
    $# 保存参数个数
    $* 保存所有选项参数 以空格隔开
    /
    #!/bin/bash 
    echo "0 is $0"  #./a.sh  
    echo "1 is $1"  #aa  
    echo "2 is $2"  #bb 
    echo " 3 is $3" #cc 
    echo "# is $#"  # 3
    echo "* is $*"  # aa bb cc 
    ///
    ./a.sh aa bb cc 

    练习:从参数里读出目录名称及文件名称
    参数1:目录名
    参数2:文件名

    根据目录名创建一个目录
    进入目录 
    在目录中创建文件(参数2)
    //
    #!/bin/bash 
    echo "i am going to create $1"
    mkdir $1 
    cd $1 

    echo "i am going to create $2"
    touch $2
    

6. read 
//
#!/bin/bash 
echo "please input name:"
read NAME  #等待输入 输入内容存到NAME变量中 
echo "name is $NAME"

#################################################################
#!/bin/bash 
read -p "please input name:" NAME  #先输出字符串 再等待用户输入 
echo "name is $NAME"
##########################################
练习:从参数里读出目录名称及文件名称
    参数1:目录名
    参数2:文件名

    根据目录名创建一个目录
    进入目录 
    在目录中创建文件(参数2)

############################################
#!/bin/bash 

read -p "please input dirname:"   DIRNAME  
mkdir $DIRNAME

cd $DIRNAME
read -p "please input filename:" FILENAME

touch $FILENAME
##############################################    

7.算术运算 + =  \*  / %
expr 3 + 5  -->8
expr 3 \* 5 -->15 
expr 3 % 2  -->1 
expr 3 / 2 -->1 

`` //不是单引号 是反引号 作用是提取输出 保存到一个变量
##################
#!/bin/bash 

OUTPUT=`ls`
echo "$OUTPUT"

SHOW=`date`
echo "$SHOW"
##################
#############################
#!/bin/bash 
NUM1=5 
NUM2=3 
NUM3=`expr $NUM1 + $NUM2`
NUM4=`expr $NUM1 \* $NUM2`
NUM5=`expr $NUM1 / $NUM2`
NUM6=`expr $NUM1 % $NUM2`
echo "$NUM3 $NUM4 $NUM5 $NUM6"
#############################

8.逻辑表达式
(1)判断两个字符串是否相等
    $NAME = "xiaoming"  #判断NAME变量中的值是否是xiaoming  判断符号= 
    注意:=符号两边必须加空格

    if条件语句 
    if [ 条件 ]      #中括号两边要加空格
    then
        语句1
    else 
        语句2 
    fi  #表示if语句结束

    ##################################
    #!/bin/bash 
    read -p "please input name:"  NAME 
    if [ $NAME = "xiaoming" ]
    then 
        echo "he is xiaoming"
    else 
        echo "he isn't xiaoming"    
    fi    
    #################################### 
     
(2)判断一个整数与另一个整数关系
    num1 -eq num2  #-eq 判断是否相等
    num1 -gt num2  #-gt 判断是否大于
    num1 -lt num2  #-lt 判断是否小于
    
    ###################################
    #!/bin/bash 
    read -p "please input num1: "  NUM1 
    read -p "please input num2: "  NUM2

    if [ $NUM1 -gt $NUM2 ]
    then 
        echo "$NUM1 > $NUM2"
    else 
        
            echo "$NUM1 <= $NUM2"
    fi        
        
    ####################################
     
    练习:实现输入一个数字 判断其是否为偶数
    #!/bin/bash 
    read -p "please input num1: "  NUM1
    NUM2=`expr $NUM1 % 2 `
    if [ $NUM2 -eq 0 ]
    then 
        echo "even"
    else 
        
            echo "odd"
    fi        
            
(3)判断文件是否存在
    -e filename #判断如果文件存在则为真 不管文件的类型
    -d filename #如果文件存在并且是目录 则为真
    -f filename #如果文件存在且为普通文件(可执行文件也是普通文件) 则为真

    -r filename #判断文件是否有只读权限
    -w filename #判断文件是否有写权限
    -x filename #判断文件是否有执行权限
###################################################
    #!/bin/bash 
    read -p "please input filename: "  FILENAME

    if [ -d $FILENAME ]
    then 
        echo "is dir"
    elif [ -f $FILENAME ]
    then 
        echo "is commen file"
    else 
        echo "haha"    
    fi    
########################################################
练习:
    练习:从参数里读出目录名称及文件名称
        参数1:目录名
        参数2:文件名

        根据目录名创建一个目录
        进入目录 
        在目录中创建文件(参数2) 
    增加:
    (1)如果目录存在 则不创建 如果该目录不存在则创建 
    (2)如果目录无写的权限 不创建文件    
    (3)如果文件已经存在 则不创建        
    对于目录而言:
    r 可以浏览目录
    w 可以在目录中创建文件
    x 可以进入这个目录
    
    如果目录已经存在 
     输出信息
    否则
        创建目录
        
    如果目录可写
     进入目录
        如果文件已存在 
            输出信息
        否则
            创建文件
            
    #!/bin/bash 
    read -p "please input dirname: "  DIRNAME

    if [ -d $DIRNAME ]
    then 
        echo "$DIRNAME has existed"
    else 
        mkdir $DIRNAME    
    fi


    if [ -w $DIRNAME ]
    then 
        cd $DIRNAME
        read -p "please input filename:" FILENAME
        if [ -f $FILENAME ]
        then 
            echo "$FILENAME has existed"
            else         
                touch $FILENAME    
        fi    
            
    fi            
    

9.
for 变量名 in 单词表 
do 
    语句 
done 
    ########################################################
    #!/bin/bash 

    NAMELIST="liuyang liuhuan  quhaoyuan zenghao sui doudou"

    for NAME in $NAMELIST #NAME会取NAMELIST里的每一个值
    do 
        echo "name is $NAME"
    done         
    #########################################################
    
    练习: for循环实现创建a.1 a.2 a.3 ....a.9
    #!/bin/bash 

    NAMELIST="1 2 3 4 5 6 7 8 9"

    for NAME in $NAMELIST #NAME会取NAMELIST里的每一个值
    do 
        touch a.$NAME
    done     


    练习:for循环实现将某一个目录aa里所有的文件拷贝到目录bb中(不用cp -r )

    read -p "please input SRCNAME:" SRCNAME
    read -p "please input DESNAME:"  DESNAME

    LIST=`ls $SRCNAME`
    mkdir $DESNAME
    for NAME in $LIST
    do 
        cp $SRCNAME/$NAME $DESNAME
    done    

10.
    while循环 
    
    while [ 条件 ]
    do 
        语句 
    done 

 #####################################
    #!/bin/bash 

    I=1
    SUM=0

    while [ $I -lt 101 ]
    do 
        SUM=`expr $SUM + $I` 
        I=`expr $I + 1`
    done

    echo "$SUM"
#####################################     
练习:创建一个目录tmpdir 然后使用while循环 在tmpdir里创建文件tmp.1 tmp.2 ...
tmp.8
#!/bin/bash 
read  DIRNAME
mkdir $DIRNAME 
cd $DIRNAME

I=1
while [ $I -lt 9 ]
do 
    touch tmp.$I 
    I=`expr $I + 1`
done


11. break continue 
#!/bin/bash 

    I=1
    SUM=0

    while [ $I -lt 11 ]
    do 
        if [ $I -eq 10 ]
        then 
            break  #break 结束循环 break允许跳出n层循环 break n 
        fi    
        SUM=`expr $SUM + $I` 
        I=`expr $I + 1`
    done

    echo "$SUM"    

    continue:结束本次循环 进入下一次循环的判断  去掉本次循环剩余的代码
    shell中continue continue n 表示将n层循环剩余的代码都去掉 

12.case语句
    case $变量名 in  
    模式1)
        语句 
        ;;
    模式2)
        语句 
        ;;
    ......
    *)
        语句 
       ;;
    esac 
    ###########################
    #!/bin/bash 
    read -p "input num:" NUM

    case $NUM in 
    1)
        echo "Monday"
    ;;
    2)
        echo "Tuesday"
    ;;
    *)
        echo "relax"
    ;;

    esac        
    ###############################    


三、linux环境
编辑器 vi  
编译器 gcc 
调试工具 gdb 

1.gcc编译器 编译程序检查文件类型
.c c语言源文件
.cpp c++源文件
.s 汇编语言文件
.java java源文件

2.gcc编译步骤
gcc a.c  -o a  //-o 为a.c 生成的可执行文件起别名
 ./a

    编译经历4步:预处理 编译 汇编 链接   
    (1)预处理:
     a、如果有头文件 会将头文件内容拷贝到源文件中
     b、如果源程序有注释 会将注释去掉
     c、如果源程序中有宏定义 会用宏值替换宏名
     
     linux@ubuntu:~/180705$ gcc -E hello.c -o hello.i 
     gcc -E 将编译过程停留在预处理阶段 预处理文件后缀名.i 
 
 
  (2)编译:将.c 源文件生成汇编语言源文件

    linux@ubuntu:~/180705$ gcc -S hello.c -o hello.s
    gcc -S 将编译过程停留在编译阶段 汇编语言文件后缀名.s 

    (3)汇编:将.c源文件生成机器码文件
    linux@ubuntu:~/180705$ gcc -c hello.c -o hello.o
    gcc -c 将编译过程停留在汇编阶段  目标文件后缀名.o 

    (4)链接  :多个.o目标文件 库文件 链接到一起
    gcc hello.c -o hello 

    作业1:
    编写一个shell脚本程序 它能根据输入的命令行参数采取不同的动作 
    如果是目录 则列出目录中所有文件 
    如果是可执行文件 则用shell 执行它
    如果是可读文件 则分页显示其内容(less)    
    
    #!/bin/bash 
    if [ -d $1 ]
    then
        ls $1
    elif [ -x $1 ]
    then 
        ./$1
    elif [ -r $1 ]
    then 
        less $1
    fi
    
    作业2:
    编写一个菜单 并实现菜单里的功能
    ***********************************
                *MENU*
          *1.copy   2.rename 
          *3.remomve  4.exit            
    ***********************************
    例如:用户按下1 则提示用户输入源和目的文件 然后执行拷贝
    输入数字2 则提示用户输入要更改的文件或目录名 然后执行更名操作
    输入数字3 则提示用户输入要删除的文件名 然后执行删除操作  rm -rf 
    输入数字4 退出shell程序
  
    #!/bin/bash
    while [ 1 ]
    do
        echo "****************************"
        echo "           *MENU*           "
        echo "    *1.copy      2.rename   "
        echo "   *3.remomve   4.exit      " 
        echo "                            "
        echo "****************************"

        read -p "请输入数字:" NUM

        case $NUM in

        1)
            read -p "请输入源文件:"   YNEME
            read -p "请输入目的文件:" MNEME
            cp $YNEME $MNEME
            ;;
        2)
            read -p "请输入要更改的文件名:" GNEME
            read -p "请输入更改后的文件名:" HNEME
            mv $GNEME $HNEME 
            ;;
        3)
            read -p "请输入要删除的文件名:" SNEME
            rm -rf $SNEME
            ;;
        4)
            exit
            ;;
        esac
        
        sleep 2
        clear
    done


        

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值