终端模拟器吧 关注:1,518贴子:2,323

【Linux shell】基本流程控制

只看楼主收藏回复

恩,正如大家所知,终端模拟器是模拟一个Linux环境,当然在指令方面也是有所相似,在终端模拟器也可以写一些shell脚本,在后台方面我觉得CM的ROM是非常好的,支持也比较全,如果系统被精简。建议下载busybox补充,如果需要java环境和gcc编译器,也可以在网上下载自行配置
首先是一些基本知识,它能干什么,它就像windows的命令提示符,可以管理文件,分区,网络,设备等等,因为有一些匹配的用法,在批量管理的时候终端体现出来一种不错的优势
我们接触最基本的就是文件目录,所有的东西都是从“/”开始,根目录,毕竟只是基于Linux,并不是真正意义上的Linux,有很多功能还是干不了的,手机嘛,没必要浪费那么多内存搞得像个服务器似的,只要满足基本的需求就可以了
/system system分区挂载点,一般是一些系统文件
/data data分区的挂载点 一般是一些系统配置,应用数据存放的地方
/proc 这个目录有点特殊,里边的文件都不是“存在的”,你可以在里边得到一些信息,例如CPU的信息
/cache cache分区挂载点,在2.3后,cache分区的作用不多
/mnt 这里一般是一些挂载点,例如内存卡
/storage 这里有时候也是有内存卡的挂载点,至于详细的,还得看厂商
/dev 里边都是手机上的一些设备,Linux里,几乎所有的东西都可以表示为一个文件,所有我们可以通过重定向输出分区的镜像到内存卡(或者用dd命令进行备份)


IP属地:广东来自Android客户端1楼2014-10-23 23:14回复
    如果不是熟悉的目录尽量不要乱删除,然后有一些基本的命令,操作文件和目录的,以下只列出命令的基本格式。并不包括所有的参数,一般的命令行都是由:命令名+参数 组成命令和参数,参数和参数之间一般有空格分开,否则会被错误地解释,例如cd/system和cd /system意义是不一样的


    IP属地:广东来自Android客户端2楼2014-10-23 23:24
    收起回复
      下面是一些基础的命令可以让你了解它能做什么,当然你想获得更多的命令的用法建议百度“Linux命令”,会得到更全的答案
      进去某个目录:cd 路径
      新建文件夹:mkdir 文件夹路径
      删除空的文件夹 rmdir 文件夹路径
      新建一个文件:touch 文件路径
      复制路径1文件到路径2:cp 路径1 路径2
      例如:cp /system/bin/sh /sdcard
      移动路径1文件到路径2,注意如果路径2不存在,移动后路径1文件会消失,谨慎操作:mv 路径1 路径2
      例如mv /sdcard/1 /sdcard/newdir/2 把/sdcard/1复制到/sdcard/newdir,并重命名为2,如果newdir内存在2文件夹,则是复制到该文件夹


      IP属地:广东来自Android客户端3楼2014-10-23 23:32
      回复
        但是,并不意味着我们的操作一定成功,因为在Linux,对文件。分区操作,都需要相应的权限,其中权限的计算方法如下
        权限:用户 用户组 其他
        读r
        写w
        执行x
        一共有3种,3个类别的权限,其中3种权限由124表示,4读 2写 1执行,3种权限,3类,构成一个3位数来表示该文件权限的数字表达方式:
        例如rwx rwx rwx这三组权限就是777也就是(4+2+1) (4+2+1) (4+2+1)对应的是用户,用户组,其他是否有对应的权限操作该文件,
        例如rw- r-- r--就是644 (4+2+0) (4+0+0) (4+0+0) 如果没有执行权限,该文件就不可以执行,所以如果出现Permission denied,你就得考虑是不是权限问题这时候可以用chmod命令改变文件(文件夹)的权限,例如如果文件夹权限是 -wx -wx -wx没有读取权限,你就不能看文件夹内容,注意,内存卡里边的文件无法改变权限,而且命令要超级用户才能执行
        chmod 数字权限 文件路径
        例如chmod 777 /data/local/tmp 将/data/local/tmp文件夹权限改为rwx rwx rwx


        IP属地:广东来自Android客户端4楼2014-10-23 23:48
        收起回复
          命令并不需要我们记住他的参数,因为我们可以用"命令 --help"用help参数过的该命令的格式,参数列表,以及说明,英文的...如果忘了参数开关,不妨可以用这个方法获得说明
          例如 free --help查看free命令的参数列表


          IP属地:广东来自Android客户端5楼2014-10-23 23:53
          回复
            分区管理
            挂载
            mount
            mount命令还能挂载镜像,这是觉得一个小好玩的地方,往文件里放文件...
            mount -o 权限[rw] 分区文件 挂载点
            例如:mount -t ext2 -o rw /sdcard/ms /ms 挂载ms文件到/ms,打开ms 目录就是打开ms文件“内部”。你可以往里边放文件,里边相当于一个分区,但是你需要用mke2fs命令先将ms文件格式化为ext2文件系统
            mount -o remount rw /system
            挂载/system为读写
            mount -bind /system /ms
            将/ms文件夹挂载到/ms,打开ms文件夹相当于打开/system文件夹


            IP属地:广东来自Android客户端6楼2014-10-24 00:11
            收起回复
              分区管理
              挂载
              mount
              mount命令还能挂载镜像,这是觉得一个小好玩的地方,往文件里放文件...
              mount -o 权限[rw] 分区文件 挂载点
              例如:mount -t ext2 -o rw /sdcard/ms /ms 挂载ms文件到/ms,打开ms 目录就是打开ms文件“内部”。你可以往里边放文件,里边相当于一个分区,但是你需要用mke2fs命令先将ms文件格式化为ext2文件系统
              mount -o remount rw /system
              挂载/system为读写
              mount -bind /system /ms
              将/ms文件夹挂载到/ms,打开ms文件夹相当于打开/system文件夹


              IP属地:山东来自Android客户端7楼2014-10-24 12:46
              回复
                仅列出常规用法格式,如果要获得更多参数,请用--help参数,例如chmod --help过去chmod的参数说明和用法,如果操作不成功,请分析问题,可能是权限问题,例如分区只读,或者权限不足
                文件管理:
                更改文件夹:cd 路径
                复制文件:cp 原文件路径 目的路径
                删除文件:rm 文件路径
                移动文件:mv 原文件路径 目的路径
                新建文件夹:mkdir 文件夹路径
                删除空文件夹:rmdir 文件夹路径
                (此命令还有其他用途)创建文件:touch 文件路径
                文本查看:cat 文本文件路径
                任务管理:
                动态查看任务:top
                查看当前进程:ps
                查看ram:free
                结束进程:kill 进程pid(pid可以通过ps看到)
                killall 进程名
                【分区管理】
                分区命令:fdisk
                挂载虚拟镜像:mount -t 分区格式 -o loop 挂载点 镜像路径
                重新挂载读写:mount -o remount rw 挂载点
                挂载文件夹:mount -o bind 挂载点 被挂的文件夹
                备份分区镜像:
                dd if=输入(分区块文件路径) of=输出(镜像路径)
                新建一个有体积的文件(可用于格式化虚拟分区):
                dd if=/dev/zero of=镜像路径 bs=块大小(默认512字节) count=块数量
                提示:镜像大小=块大小x块数量
                格式化命令:
                mkswap 路径 //格式化某文件为swap类型的分区或者是分区镜像
                swapon 镜像路径 //开启虚拟内存
                swapoff 镜像路径 //关闭虚拟内存
                mke2fs 镜像路径 //格式化某个文件(可以用dd生成)为ext2格式的“分区”
                还有很多文件系统相关的命令,具体还得看你手机支持不
                镜像相关:
                16进制查看文件:hexdump 文件路径
                提示:文件过大,信息太多,可能会卡,请不要一次性查看所有的
                od的效果和hexdump差不多
                od 文件路径
                网络相关:
                网络的会的不多,仅列出几个
                ping:给目的主机发送一个数据包,如果主机存在,网络正常(而且对方不屏蔽),目的主机要给你返回一个数据包,以此检查网络连通
                ping ip或者网站
                ++++
                tcpdump:抓包工具
                显示当前ip相关信息:ip addr
                显示arp信息:arp
                权限相关:
                获取管理员权限:su
                更改文件权限:chmod 权限 路径


                IP属地:广东来自Android客户端8楼2014-11-07 00:27
                回复
                  【备份压缩】
                  tar备份:tar -cvf .tar文件路径 备份目录
                  tar解压:tar -xvf .tar文件路径
                  还有其他命令就不一一列出了
                  gzip gunzip bzip2(生成bz2)等等
                  【逻辑结构】
                  条件句格式:
                  if 条件
                  then
                  语句块1
                  else
                  语句块2
                  fi
                  例如
                  if [ $a == 10 ];
                  then
                  echo 真
                  else
                  echo 假
                  fi
                  条件请参考【条件测试】
                  case$变量名in
                  模式1)
                  命令序列1
                  ;;
                  模式2)
                  命令序列2
                  ;;
                  *)
                  默认执行的命令序列
                  ;;
                  esac
                  循环句:
                  for 变量名 in 枚举队列(以空格分开)
                  do
                  语句块
                  done
                  例子:列举当前文件夹的文件
                  a=$(ls) //获取文件列表
                  for c in $a
                  do
                  echo $c
                  done
                  for ((变量初值;结束条件;增量)) //和c语言for格式差不多
                  do
                  语句块
                  done

                  for ((a=10;a>0;a--))
                  do
                  echo $a
                  done
                  还有while之类的就不一一列出来了,有兴趣自行百度,要注意的细节问题很多
                  文本处理:
                  文本处理是很强大的,对于信息的筛选,是很有用的,而且配合管通道之类的,用起来比较灵活,要掌握并不是说说两句就能懂了,有兴趣自行百度
                  查看文本:cat 文本文件路径
                  显示前几行的内容:head -行数 文本文件路径
                  显示倒数几行的内容:tail -行数 文本路径
                  筛选行:grep 匹配内容
                  分割文本:awk 'FS="分割点"{print }'
                  提示:awk的参数不少,只是还涉及到其他知识,有兴趣百度


                  IP属地:广东来自Android客户端9楼2014-11-07 00:28
                  回复
                    【测试运算符】
                    字符串测试
                    string1 = string2 string1 等于string2(=号两侧必须有空格)
                    string1 != string2 string1不等于string2
                    -z string string长度为0
                    -n string string长度不为0
                    例子:
                    test -z $a 或者 [ -z $a ] 这里是变量a长度为0的测试,
                    if [ -z $a ];
                    then
                    echo "变量a的长度为0"
                    fi
                    以上"如果$a的长度为0则条件成立,执行then后的命令,直到fi结束条 件句",
                    整数测试
                    -eq 等于
                    -ne 不等于
                    -gt 大于
                    -ge 大于或等于
                    -lt 小于
                    -le 小于等于
                    逻辑
                    expr1 -a expr2 与
                    expr1 -o expr2 或(or)
                    文件测试
                    -b 该文件是块特殊文件
                    -c 字符特殊文件
                    -d 目录存在
                    -f 普通文件存在而不是目录
                    -g 设置了set-group-ID位
                    -k sticky位被设置
                    -p 该文件是命名管道(group)
                    -r 文件可读
                    -s 文件大小不为0
                    -u 设置了set-user-ID位
                    -w 可写
                    -x 可执行
                    测试命令:test
                    用于计算条件表达式,返回真或者假,test退出状态为0代表真,不为0代表假


                    IP属地:广东来自Android客户端10楼2014-11-07 00:29
                    回复
                      符号意义
                      $
                      引用变量,例如
                      a=10
                      echo $a
                      #
                      注释,注释部分不会被shell解释
                      %
                      取余,例如expr 3 % 2
                      /
                      1.路径分割,或者表示根目录,例如cd /
                      2.除号,例如:expr 2 / 2
                      &
                      将任务后台运行,例如sleep 3 &
                      &&
                      如果上一句运行返回值为0则运行后面的,例如ls && echo Success
                      \转义符
                      有些字符的意义很多,例如*可以是通配,可以是乘号,谁说不转义,expr 2 * 1就会被认为*是一个通配符
                      *
                      1.乘号,例如expr 1 \* 2
                      2.通配符,例如ls a* 显示当前文件夹a开头的文件
                      rm -r aaa* 删除当前文件夹以aaa开头的文件和文件夹以及其子目录
                      (())
                      扩展运算符,让操作有点像c的写法
                      例如((a++))相当于a=0;a=$(expr $a + 1)
                      |
                      1.或
                      2.管通道例如:ls | grep a*
                      ||
                      如果前面句子返回值不为0则执行下一句
                      ?
                      单字符通配
                      []
                      1.数组底标
                      2.条件运算符
                      定向输出:
                      >
                      >>


                      IP属地:广东来自Android客户端11楼2014-11-07 00:48
                      回复



                           --来自爆菊军团官方指定版贴吧客户端


                        IP属地:福建来自Android客户端13楼2014-12-02 00:16
                        收起回复
                          @月夜星陨 跪求大神指教,真小白啊
                             --来自爆菊军团官方指定版贴吧客户端


                          IP属地:福建来自Android客户端14楼2014-12-02 00:17
                          收起回复


                            来自手机贴吧15楼2015-04-15 08:54
                            收起回复