zoukankan      html  css  js  c++  java
  • 命令行的使用

    1. 命令行

    (1) $符号在命令中表示引用变量,可以export设置变量。

    例如查看环境变量命令:echo $PATH

    此处就是通过$引用PATH变量(这是个全局变量)

    例如:

    d

       

    当我们直接敲一个命令的时候,bash就去PATH变量记载的路径中寻找该程序。如果想运行一个自己安装的二进制程序,则需要先加上该命令所在的路径。

    (2) man  命令

    Man命令时专门解释其他命令的命令

       

    2.   这样使用shell

    2.1   理解目录结构

    • 可以通过Ctrl  +  Alt  +  F1打开终端,Ctrl  +  Alt  +  F7再回到图形界面

       

    2.2   翻旧帐-history命令

    如果想查看很久之前输入过的命令,可以用该命令查看。默认情况下显示前1000条命令。也可以指定要显示的命令条数

    history N

    注:history命令并不像ls命令那样是一个独立的命令,它是一个bash的关键字,也就时说history命令只在特定版本的bash上有用。

       

    2.3 more or less——命令的分页显示

    [more]

    More是一个用来阅读文本的命令,它有分页的功能。他可以从文件或者获取的数据流中先显示一屏,等用户按下回车键的时候再显示下一屏,直到显示完。当然也可以不等显示完直接按q推出。例如查看当前运行的所有进程:

    ps -A | more

    注意:上述命令中有一个"|"符号。该符号称为管道符,这个符号的意思就是把前一个命令的输出内容交给后一个命令,作为后一个命令的数据输入。上述命令就是把ps -A输出的那一堆字符交给more命令,然后more命令在处理之后按屏幕显示给用户。

    [less]

    less和more命令实现的功能基本一致,只不过less命令比more命令要强大一些。对于more命令之前看过的东西时不能回头再去看得,只能往下翻页去看,知道看完之后自动退出。而less命令可以用上下箭头来翻阅,并且看完之后是不会自动推出的,一定要按q键退出。

    注意:着两个命令都可以直接查看文件

    less /文件路径/文件名

       

    2.4 通配符

    linux使用"*"来代表任意个字符,"?"代表任意一个字符。

       

    3. shell编程

    3.1 把命令行打包执行

    场景:

    把一张SD卡插进电脑,然后运行mount命令进行挂载:

    sudo mout /dev/sdb1 /mnt/

    然后把里面的所有照片拷贝进来

    cp /mnt/*.jpg /home/zhanglu/Picture

    之后把这些照片压缩放在同一个目录备份:

    tar -czvf /home/zhanglu/Backup/pic.tar.gz /mnt/*.jpg

    备份完了之后把卡里的文件全部删除:

    rm /mnt/*.jpg

    最后卸载这个SD卡:

    sudo umount /mnt/

    如上,每次在拷贝照片的时候都要输入上述好几条命令,比较麻烦,有没有比较简单的批处理方法呢?

    【高级批处理——shell脚本】

    要写个shell脚本很简单,找个编辑器把上述命令按照顺序拷贝进去保就OK。于是我们写一个这样的文件:

    sudo mout /dev/sdb1 /mnt/

    cp /mnt/*.jpg /home/zhanglu/Picture

    tar -czvf /home/zhanglu/Backup/pic.tar.gz /mnt/*.jpg

    rm /mnt/*.jpg

    sudo umount /mnt/

    然后保存起来随便取个名字:dailybackup.sh。到目前为止这个脚本还不能运行,因为我们还没有赋予他可以运行的权限,执行下面命令赋予可运行权限

    chmod +x ./dailybackup.sh

    这时候脚本就可以运行了。

    注意:shell脚本不要求特定的扩展名,只要是文本文件并且拥有可执行权限就OK.但是我们一般还是以sh结尾。

    【灵活的shell脚本】

    脚本是完成了,但是比较蛋疼的是我每天打包备份的文件名可能不一样,但是脚本中的写死了。这时候就需要修改一下脚本。

    sudo mout /dev/sdb1 /mnt/

    cp /mnt/*.jpg /home/zhanglu/Picture

    tar -czvf /home/zhanglu/Backup/pic`date %Y%m%d`.tar.gz /mnt/*.jpg

    rm /mnt/*.jpg

    sudo umount /mnt/

    这回脚本中使用了"`"符号,"`"符号的意思是:先执行两个"`"之间的命令,用执行后的输出代替两个"`"之间的内容哦能否,包括"`"本身。

    注意:这里的"`"不是单引号" ' ",而是键盘上和"~"位于同一个键的反引号。

    上述脚本中的两个反引号的作用就是以年月日的格式打印当前时间。

       

    3.2 规范的shell脚本

    (1)要有必要的注释,shell脚本中使用"#"作为注释的开头

    (2)指明使用的shell

    有时候可以看到一个shell脚本的开头是这样的:

    #! /bin/bash

    "#!"放在一起并且还出现在脚本的第一行那就不是注释啦!这一行的意思时运行这个脚本所需要的shell。

    我们linux系统中有很多的shell,比如bash,tcsh,ksh等。这些不同的shell他们的语法以及特性大多时不一样的。因此在运行脚本的时候需要指定用哪个shell。

    当然你也可以不加这一样代码,这时候你就要告诉系统你用的时那个shell,例如用bash运行,需要下面的命令:

    bash ./dailybackup.sh

       

    3.3 使用函数

    Shell脚本像大多数编程语言一样,也支持函数。如果有一段代码需要在脚本里面反复执行多次,不必反复的写多份,只需要将他们写成一个函数,需要的时候直接调用就行。比如自动备份的脚本:

    #!/bin/bash

    #自动备份脚本

    dailybackup() {

    udo mout /dev/sdb1 /mnt/

    cp /mnt/*.jpg /home/zhanglu/Picture

    tar -czvf /home/zhanglu/Backup/pic`date %Y%m%d`.tar.gz /mnt/*.jpg

    rm /mnt/*.jpg

    sudo umount /mnt/

    }

    dailybackup #调用函数的时候不许要写小括号

       

    3.4 在shell脚本中使用变量

    (1)用户变量——新手拈来

    Shell中的变量比较随意简单,不必声明,随用随写,如下:

    value = 28

    这就获得了一个内容是28的变量,那么怎么引用这个变量呢?在引用变量的时候需要在变量名称前面加上"$"符号,用来表示这是一个变量。例如:

    #! /bin/bash

    value = 28

    echo value #输出value

    echo $ value  #输出28

    所以在使用变量的时候前面一定要加上"$",否则就会被当作一般的字符串处理的。

       

    不过有时候变量的引用可能会紧跟着字符串,这时候需要进行特殊处理:

    #! /bin/bash

    word1 = hello

    word2 = world

    echo $word1BIG$word2

    这时候输出的是 helloworld,而不是helloBIGworld。因为系统把$word1BIG当作一个变量的引用了,然而我们根本没有这个变量,因此就会打印空白。如果想让shell理解我们的意图这时候我们可以加上大括号

    echo ${word1}BIG${word2}

       

    (2)变量类型——只有字符串

    在shell脚本中没有整型,浮点型等其他的数据类型,仅仅有字符串。如果要进行数字的数学运算需要使用expr命令

    num=1

    num=`expr $num + 2`

       

    (3)环境变量——在哪儿都能用

    上面咱们定义的变量是用户变量,除了自己定义的用户变量之外还有一种变量就是系统变量。比如之前见到的PATH,和HOME变量。

    所谓的环境变量有点类似C语言中的全局变量,就是在整个系统中都有效。用户变量就是只在一个脚本中有效。在其他的脚本中无法访问。而系统变量可以在任何地方访问。想要定义一个全局变量也很简单,只要在变量前面加上export:

    提示:环境变量在当前会话结束后失效

       

    (4)特殊变量——一堆符号

    除了用户变量和系统变量外还有其他一些比较特殊的变量,这些特殊变量有以下特征:

    • 看着就比较特殊
    • 脚本执行时自动被设定
    • 不可修改

    特殊变量主要就下面这些

    • $n——这里n时一个0~9的数字。这个变量代表了执行脚本所加的第n个参数,n=0代表代表脚本本身的名称
    • $*——这个变量代表执行脚本所加的所有的参数(不包括脚本名称本身)
    • $#——执行脚本所加的变量个数
    • $$——该脚本的PID

       

    3.5 shell中的条件判断

    (1)if和fi

       

       

       

       

       

  • 相关阅读:
    .某机构java架构师路线
    大数据计算的思想--RDD理解
    大数据组件以及岗位职业规划
    大数据技术路线图 --全图.md
    大数据技术路线图 --全图
    视频会议 lsk_lyy_share
    富文本文档git神奇-simul document
    获取当前app的版本号
    在vue中用axios设置请求拦截和响应拦截
    苹果IOS下text-shadow与box-shadow失效的解决办法
  • 原文地址:https://www.cnblogs.com/JackDesperado/p/4788801.html
Copyright © 2011-2022 走看看