精华内容
下载资源
问答
  • shell基本命令

    2018-01-10 15:41:52
    shell基本命令 在适合在vi或vim里写 运行。其中包含3种方法的99乘法表
  • HDFS常用Shell命令

    2021-01-07 09:35:42
    基本命令 1.启动hadoop集群 HDFS相关组件: sbin/start-dfs.sh YARN相关组件: sbin/start-yarn.sh 2.显示目录信息 -ls hadoop fs -ls $pdir 3.在HDFS上创建目录 -mkdir hadoop fs -mkdir -p $pdir/$...
  • shell (计算机壳层) Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。...shell是一个命令语言解释器,它拥有自己内建的...

    shell (计算机壳层)

    Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
    shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
    shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

    脚本示例

    截取主机ip:

    [root@localhost ~]# cd /mnt/
    [root@localhost mnt]# vim ip_show.sh    ##编辑脚本文件
    [root@localhost mnt]# cat ip_show.sh
    #!/bin/bash   ##幻数
    ifconfig eth0 | awk -F " " '/inet\>/{print $2}'   ##显示主机ip
    [root@localhost mnt]# chmod +x ip_show.sh   ##赋予权限
    [root@localhost mnt]# /mnt/ip_show.sh    ##绝对路径调用脚本
    172.25.254.119
    [root@localhost mnt]# sh ip_show.sh    ##直接调用脚本
    172.25.254.119

    这里写图片描述
    编辑脚本文件内容:
    这里写图片描述

    一·在新脚本中自动添加信息

    [root@localhost mnt]# vim /etc/vimrc
     65 map <F4> ms:call WESTOS()<cr>'s   ##使用F4快捷键调用命令
     66 func WESTOS ()
     67         call append(0,"############################")
     68         call append(1,"# Author:      linux".("       #"))
     69         call append(2,"# Version:          ".("       #"))
     70         call append(3,"# Mail:             ".("       #"))
     71         call append(4,"# Date:        ".strftime("%Y-%m-%d").("      #"))
     72         call append(5,"# Description: ".("            #"))
     73         call append(6,"#              ".("            #"))
     74         call append(7,"############################")
     75         call append(8," ")
     76         call append(9,"#!/bin/bash")
     77 endfunc
    [root@localhost mnt]# vim test.sh       ##使用快捷键F4调用命令
    [root@localhost mnt]# vim /etc/vimrc
    注释6566 autocmd BufNewFile *.sh exec ":call WESTOS()"     ##打开新文件直接添加(只针对与新文件,调用过的文件,不会第二次再调用)
    [root@localhost mnt]# vim test.sh       ##打开文件直接添加

    编辑配置文件内容:
    这里写图片描述
    打开脚本文件
    这里写图片描述

    二·Shell中常用命令

    1、diff命令是用来比较两个文件或目录不同

    a –add 表示添加
    c –change 表示更改
    d –delete 表示删除
    <表示第一个文件中的内容
    —-分割线
    表示第二个文件中的内容

    [root@localhost mnt]# vim westos
    [root@localhost mnt]# cat westos
    hello 123
    linux
    [root@localhost mnt]# vim westos1
    [root@localhost mnt]# cat westos1
    hello 123
    [root@localhost mnt]# diff westos westos1      ##比较文件过程中结果读取
    2d1
    < linux
    d:删除(删除第一个文件中的第二行)

    这里写图片描述

    [root@localhost mnt]# vim westos1
    [root@localhost mnt]# cat westos1
    hello 123
    westos
    [root@localhost mnt]# diff westos westos1
    2c2
    < linux
    ---
    > westos
    c:改变(将第一个文件中第二行改变成第二个文件中第二行)

    这里写图片描述

    [root@localhost mnt]# vim westos
    [root@localhost mnt]# cat westos
    hello 123
    [root@localhost mnt]# diff westos westos1
    1a2
    > westos
    a:添加(在第一个文件中添加第二个文件第二行)

    这里写图片描述

    2、补丁patch

    [root@localhost mnt]# ls
    ip_show.sh  westos  westos1
    [root@localhost mnt]# diff -u westos westos1     ##-u:创建补丁文件
    [root@localhost mnt]# diff -u westos westos1 > westos.path    ##将两个文件都导入新的文件中
    [root@localhost mnt]# cat westos.path
    [root@localhost mnt]# yum install patch -y
    [root@localhost mnt]# ls
    ip_show.sh  westos  westos1  westos.path
    [root@localhost mnt]# patch -b westos westos.path   ##-b:保留原文件
    [root@localhost mnt]# ls
    ip_show.sh  westos  westos1  westos.orig  (生成原文件) westos.path
    [root@localhost mnt]# cat westos.orig     
    hello 123
    [root@localhost mnt]# cat westos
    hello 123
    westos
    [root@localhost mnt]# cat westos1
    hello 123
    westos

    这里写图片描述这里写图片描述

    在做补丁实验时,两个文件中的内容必须是原文件,否则会生成另一个文件

    3、&&和||
    &&:条件为真
    ||:条件为假

    [root@localhost mnt]# vim ip_check.sh
    [root@localhost mnt]# sh ip_check.sh 172.25.254.71
    172.25.254.71 is up
    [root@localhost mnt]# sh ip_check.sh 172.25.254.222
    172.25.254.222 is down

    编辑脚本文件:
    这里写图片描述
    这里写图片描述

    4、sort:多用于字符排序

    sort -n 纯数字排序
    sort -r 倒序
    sort -u 去掉重复的数字
    sort -o 输出到指定文件中
    sort -t 指定分隔符
    sort -k 指定要排序的列

    [root@localhost mnt]# vim westos
    [root@localhost mnt]# cat westos
    [root@localhost mnt]# sort -n westos    ##纯数字排序
    [root@localhost mnt]# sort  westos     ##排序
    [root@localhost mnt]# sort -u westos    ##去掉重复数字       
    [root@localhost mnt]# sort -rn westos       ##纯数字倒序
    [root@localhost mnt]# sort -n westos -o file    ##输出到指定文件中
    [root@localhost mnt]# cat file
    [root@localhost mnt]# vim westos
    [root@localhost mnt]# cat westos
    [root@localhost mnt]# sort -t : -k 2 -n westos     ##以:为分隔符,第二列排序
    [root@localhost mnt]# sort -t : -k 1 -n westos

    这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述

    5、uniq:对重复字符做相应的处理

    uniq -u 显示唯一(不重复)的行
    uniq -d 显示重复的
    uniq -c 每行显示一词并统计重复次数

    [root@localhost mnt]# vim westos
    [root@localhost mnt]# cat westos
    [root@localhost mnt]# sort -n westos | uniq -c     ##每行显示一词并统计重复次数
    [root@localhost mnt]# sort -n westos | uniq -d      ##显示重复的
    [root@localhost mnt]# sort -n westos | uniq -u      ##显示唯一(不重复)的

    这里写图片描述这里写图片描述

    6、test命令
    test命令和[ ]等同

    test “ A"==" A "==" B” 等同[“ A"==" A "==" B”]
    [“ A"=" A "=" B”] 等于
    [“ A"!=" A " ! =" B”] 不等于
    [“ A"eq" A " − e q " B”] 等于
    [“ A"ne" A " − n e " B”] 不等于
    [“ A"le" A " − l e " B”] 小于等于
    [“ A"lt" A " − l t " B”] 小于
    [“ A"ge" A " − g e " B”] 大于等于
    [“ A"gt" A " − g t " B”] 大于
    [“ A"ne" A " − n e " B”-a” A"gt" A " − g t " B”] -a必须两个都满足
    [“ A"ne" A " − n e " B”-o” A"gt" A " − g t " B”] -o满足一个条件
    [-z” A][n A ” ] 文 件 是 否 为 空 [ − n ” A”] 文件是否不为空
    [“file1”-nt”file2”] 判断file1是否比file2新
    [“file1”-ot”file2”] 判断file1是否比file2旧
    [“file1”-ef”file2”] 两个文件节点是否相同
    [-e “file”] 文件是否存在
    [-f “file”] 文件是否为普通文件
    [-L “file”] 文件是否为符号链接
    [-S “file”] 文件是否为套接字
    [-b “file”] 文件是否为块设备
    [-d “file”] 文件是否为目录
    [-c “file”] 文件是否为特殊文件

    实验一:

    [root@localhost mnt]# touch file
    [root@localhost mnt]# ln /mnt/file /mnt/file1
    [root@localhost mnt]# ls -l
    [root@localhost mnt]# ls -li *    ##查看节点
    [root@localhost mnt]# [ "/mnt/file" -ef "/mnt/file1" ]&& echo yes || echo no        ##两个文件节点是否相同  
    [root@localhost mnt]# rm -fr file1     ##删除
    [root@localhost mnt]# ll
    [root@localhost mnt]# touch file1    ##重新建立文件
    [root@localhost mnt]# ll
    [root@localhost mnt]# [ "file" -ot "file1" ]&& echo yes || echo no    ##比较两个文件哪个老
    [root@localhost mnt]# [ "file" -nt "file1" ]&& echo yes || echo no    ##比较两个文件哪个新

    这里写图片描述

    实验二:

    [root@localhost mnt]# vim num_check.sh      ##判断是否为10以内的数字     
    [root@localhost mnt]# sh num_check.sh 20    ##调用脚本
    [root@localhost mnt]# sh num_check.sh 3

    编辑脚本内容:
    这里写图片描述
    这里写图片描述

    实验三:
    (1)文件是否存在

    [root@localhost mnt]# vim file.sh     ##编写脚本文件
    [root@localhost mnt]# sh file.sh -e   ##文件是否存在
    [root@localhost mnt]# touch file    ##建立文件
    [root@localhost mnt]# sh file.sh -e   ##再次查看
    [root@localhost mnt]# sh file.sh -f     ##是否为普通文件
    [root@localhost mnt]# sh file.sh -L    ##文件是否为软链接
    [root@localhost mnt]# ls

    编辑脚本文件:
    这里写图片描述
    这里写图片描述

    (2)文件是否为软链接

    [root@localhost mnt]# rm -fr file
    [root@localhost mnt]# ln -s /mnt/file.sh /mnt/file    ##制作软链接
    [root@localhost mnt]# ll
    lrwxrwxrwx 1 root root  12 Jun 13 05:33 file -> /mnt/file.sh    ##软链接
    [root@localhost mnt]# sh file.sh -L    ##文件是否为软链接
    [root@localhost mnt]# sh file.sh -S    ##文件是否为套接子

    这里写图片描述

    (3)文件是否为套接子

    [root@localhost mnt]# yum install mariadb-server -y   ##安装数据库
    [root@localhost mnt]# systemctl start mariadb    ##开启服务
    [root@localhost mnt]# ls /var/lib/mysql/
    mysql.sock    ##套接子
    [root@localhost mnt]# ll
    lrwxrwxrwx 1 root root  12 Jun 13 05:33 file -> /mnt/file.sh    ##软链接
    [root@localhost mnt]# ll /var/lib/mysql/
    srwxrwxrwx 1 mysql mysql        0 Jun 13 05:42 mysql.sock
    [root@localhost mnt]# rsync -D /var/lib/mysql/mysql.sock /mnt/file    ##远程传输套接子
    [root@localhost mnt]# ll
    srwxrwxrwx 1 root root   0 Jun 13 05:43 file    ##套接子
    [root@localhost mnt]# sh file.sh -S     ##文件是否为套接子
    [root@localhost mnt]# sh file.sh -s     ##文件是否有容量
    [root@localhost mnt]# sh file.sh -b     ##文件是否块设备

    这里写图片描述

    (4)文件是否为块设备

    [root@localhost mnt]# ll
    srwxr-xr-x 1 root root   0 Jun 13 05:51 file    ##套接子
    [root@localhost mnt]# rm -fr file
    [root@localhost mnt]# rsync -D /dev/vdb /mnt/file    ##远程传输块设备
    [root@localhost mnt]# ll
    brw-r----- 1 root root 253, 16 Jun 13 05:52 file    ##块设备
    [root@localhost mnt]# sh file.sh -b     ##文件是否为块设备
    [root@localhost mnt]# sh file.sh -d     ##文件是否为目录

    (5)文件是否为目录

    [root@localhost mnt]# ll
    brw-r----- 1 root root 253, 16 Jun 13 05:52 file    ##块设备
    [root@localhost mnt]# rm -fr file
    [root@localhost mnt]# mkdir /mnt/file    ##建立目录
    [root@localhost mnt]# ll 
    drwxr-xr-x 2 root root   6 Jun 13 05:57 file    ##目录
    [root@localhost mnt]# sh file.sh -d    ##文件是否为目录
    [root@localhost mnt]# sh file.sh -c    ##文件是否为字符设备

    这里写图片描述

    7、tr命令

    [root@localhost mnt]# vim test.sh
    [root@localhost mnt]# tr 'a-z' 'A-Z' < test.sh    ##小写转换为大写
    [root@localhost mnt]# tr 'A-Z' 'a-z' < test.sh    ##大写转换为小写

    脚本编辑文件:
    这里写图片描述
    这里写图片描述

    实验一:

    [root@localhost mnt]# vim test.sh    ##编辑脚本(不区分大小写)
    [root@localhost mnt]# sh test.sh HELLO     ##调用脚本
    [root@localhost mnt]# sh test.sh hello
    [root@localhost mnt]# sh test.sh hell
    [root@localhost mnt]# sh test.sh WE

    编辑脚本内容:
    这里写图片描述
    这里写图片描述

    实验二:

    [root@localhost mnt]# rm -fr *
    [root@localhost mnt]# vim test.sh
    $#    ##编辑内容($#的用法是后面有几个参数返回就是几)
    [root@localhost mnt]# sh test.sh 777
    [root@localhost mnt]# sh test.sh 77
    [root@localhost mnt]# sh test.sh 7 5
    [root@localhost mnt]# sh test.sh 7 9 0 6 5 6 6 
    [root@localhost mnt]# sh test.sh hello
    [root@localhost mnt]# sh test.sh hel lo 

    脚本编辑内容:
    这里写图片描述
    这里写图片描述

    展开全文
  • 详细介绍了 shell 基础 中的Bash基本命令,包括历史命令,定向输入输出,管道符,自定义命令等等。附有详细截图演示。适合初学。
  • 该程序在LINUX下运行,实现了shell一些基本命令,并且还实现了后台命令。还有很多不足,公供参考
  • Shell 脚本常用命令

    万次阅读 多人点赞 2019-07-31 19:32:50
    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。 1 Shell中的特殊符号 1.1 $ 美元符号。用来表示变量的值。如变量...

    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。

     

    1           Shell中的特殊符号

    1.1           $  美元符号。用来表示变量的值。如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值。

    1.2          #  井号。除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了。

    1.3           “”  双引号。shell不会将一对双引号之间的文本中的大多数特殊字符进行解释,如#不再是注释的开头,它只表示一个井号“#”。但$仍然保持特殊含义。(在双引号中的$加变量名,即:$PARAM_NAME,依然会转换成变量的值。)

    1.3.1     双引号对于某些特殊符号是不起作用的, 例如:”,$,\,`(反引号)

    1.3.2     双引号和单引号不能嵌套。即:echo ‘””’  输出””,  echo “’’” 输出’’

    1.4           ‘’  单引号。shell不会将一对单引号之间的任何字符做特殊解释。(在双引号中的$加变量名,即:$PARAM_NAME,不会转换成变量的值。)

    1.4.1     echo “$HOME”    (结果:/home/xiongguoan)

    1.5          ``  倒引号。命令替换。在倒引号内部的shell命令首先被执行,其结果输出代替用倒引号括起来的文本,不过特殊字符会被shell解释。

    1.5.1     echo ‘$HOME’    (结果:$HOME)

    1.6          \  斜杠。用来去掉在shell解释中字符的特殊含义。在文本中,跟在\后面的一个字符不会被shell特殊解释,但其余的不受影响。

    1.7          []中括号, 主要是用来测试条件的,通常放在if语句的后面。 (不过还是不太明白),但是中括号本身不会在测试语句执行后消失。

    1.7.1     echo [$HOME]   (结果:出现错误)

    1.7.2     echo [$HOME ]   (结果:[/home/xiongguoan ]) (注意:HOME后面有空格哦。)

    1.7.3     echo [$HOME –eq ‘/xiong’]  (结果:[/home/xiongguoan –eq /xiong])

     

    1.8          {}大括号,主要是和$符号配合,作为字符串连接来使用

    1.8.1     echo ${HOME}ismydir   (结果:/home/xiongguoanismydir)

     

    2           预定义的变量

    2.1          特殊变量

     

    $      shell变量名的开始,如$var

    |      管道,将标准输出转到下一个命令的标准输入

    $#     记录传递给Shell的自变量个数

    #      注释开始

    &      在后台执行一个进程

    ?     匹配一个字符

    *      匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)

    $-     使用set及执行时传递给shell的标志位

    $!     最后一个子进程的进程号 

    $?     取最近一次命令执行后的退出状态(返回码)

    $*     传递给shell script的参数

    $@     所有参数,个别的用双引号括起来

    $0     当前shell的名字

    $n     (n:1-) 位置参数

    $$     进程标识号(Process Identifier Number, PID)

    >      输出重定向

      <      输入重定向

      >>      输出重定向(追加方式)

      []     列出字符变化范围,如[a-z]

     

     

    2.2          代值变量

     

    * 任意字符串 

    ? 一个任意字符 

    [abc] a, b, c三者中之一 

    [a-n] 从a到n的任一字符 

     

     

    2.3          特殊字符的表达

     

    \b 退回  
    \c 打印一行时没有换行符 这个我们经常会用到  
    \f 换页  
    \r 回车  
    \t 制表  
    \v 垂直制表  
    \\ 反斜线本身 

     

    2.4          其他字符

    2.4.1     分号

    ; 表示一行结束

    2.4.2     圆括号

    () 表示在新的子shell中执行括号内的命令(这样可以不改变当前shell的状态。)

    但是圆括号在单/双引号内失去作用,只作为普通字符。

    2.4.3     花括号

    2.4.3.1    分割命令的用法

    与圆括号相似,但是:1. 花括号内的命令在当前shell中执行;2.花括号必须作为命令的第一个字符出现。

    2.4.3.2    引用变量的用法

    在$后面,表示变量名的开始和结束

     

    2.4.4     方括号

    相当与test命令,用来执行测试条件,通常用在需要判断条件的语句后面,例如:if,while等等。

     

     

    3           设置变量

    3.1          格式:VARNAME=value (i.e. PARAM=’hello’)

    3.2          注意:

    3.2.1     等号的前后不能有空格

    3.2.2     如果变量的值是一个命令的执行结果,请加上反引号(`)。

     

    4           引用变量

    4.1          $VARNAME

    4.1.1     e.i.  echo $HOME   (结果:/home/xiongguoan)

    4.2          变量默认值

    4.2.1     在引用一个变量的时候可以设定默认值。如果在此之前,该变量已经设定了值,则此默认值无效。如果此时变量没有被设定值,则使用此默认值(但是没有改变此变量的值)。

    4.2.2     echo Hello ${UNAME:-there}     #其中there是UNAME的默认值

    4.2.3     其他关于默认值与判读变量的方法:

     

    利用大括号表示变量替换

    表示形式

    说明

    ${VARIABLE}

    基本变量替换。大括号限定变量名的开始和结束

    ${VARIABLE:-DEFAULT}

    如果VARIABLE没有值,则这种表示形式返回DEFAULT的值

    ${VARIABLE:=DEFAULT}

    如果VARIABLE没有值,则这种表达形式返回DEFAULT的值。另外,如果VARIABLE没有设置,则把DEFAULT的值赋予它

    ${VARIABLE:+VALUE}

    如果VARIABLE被设置,则这种表示形式返回VALUE;否则,返回一个空串

    ${# VARIABLE}

    这种表示形式返回VARIABLE值的长度,除非VARIABLE是* 或者@在为*或者@的特殊情况下,则返回$@所表示的元素的个数。要记住,$ @保存传给该脚本的参数清单

    ${VARIABLE:?MESSAGE}

    如果VARIABLE没有值,则这种表示形式返回MESSAGE的值。Shell也显示出VARIABLE的名字,所以这种形式对捕获得错误很有用

     

     

    4.2.4     注意:

    4.2.4.1    使用${VALIABLE:?MESSAGE},如果发现此变量此时没有值,则脚本停止运行并显示行号和变量名称。 主要用于调试。

    4.2.4.2     

     

    5           位置变量

    5.1          使用$1,$2,$3…$9,${10},${11}…来代表输入的参数。其中$0代表被执行的命令或者脚本的名字。$1,$2…代表输入的第1,2…个参数

    5.2          例子:

    # cat count.sh#!/bin/sh

    A=$1             # 将位置$1的数值读入,并赋给变量A

    B=$2             # 将位置$2的数值读入,并赋给变量B

    C=$[$A+$B]       # 将变量A与B的值相加,将结果赋给C

    echo $C          # 显示C的数值

     

    结果:

    # ./count.sh  3  6

    9

    # ./count.sh 34  28

    62

    5.3          $@和$*代表参数的列表,$#代表参数的数量 (不知道$@和$*之间的差别)

     

     

    6           运算符和优先级

     

    Shell运算符和它们的优先级顺序

    级别

    运算符

    说明

    13

    -, +

    单目负、单目正

    12

    !, ~

    逻辑非、按位取反或补码

    11

    * , / , %

    乘、除、取模

    10

    +, -

    加、减

    9

    << , >>

    按位左移、按位右移

    8

    < =, > =,  < , >

    小于或等于、大于或等于、小于、大于

    7

    = = , ! =

    等于、不等于

    6

    &

    按位与

    5

    ^

    按位异或

    4

     |

    按位或

    3

    &&

    逻辑与

    2

    | |

    逻辑或

    1

    =, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> =

    赋值、运算且赋值

     

     

     

    7           source / export / let / unset

    7.1          source

    7.1.1     正常情况下,脚本中执行的参数设置只能影响到shell脚本本身的执行环境,不能影响到调用此shell的脚本。

    7.1.2     使用source命令执行脚本,可以让脚本影响到父shell的环境(即调用此shell的当前shell)。

    7.1.3     例如:source env.sh

    7.2          export

    7.2.1     在bash下,使用export建立环境变量后,会影响到子shell脚本和当前shell的环境变量

    7.3          unset

    7.3.1     删除环境变量

    7.3.2     i.e.

    #export newval=1

    #echo $newval

    1

    #unset newval

    #echo $newval

        (ß此处为空行,newval已经被删除)

    7.4          let

    7.4.1     在bash中只用此命令可以建立一个临时的变量,此变量不会影响到子shell

     

    8            逻辑判断

    8.1          if

    8.1.1     单格式与嵌套

     

    if 条件表达式  
    then #当条件为真时执行以下语句  
    命令列表  
    else #为假时执行以下语句  
    命令列表  
    fi

     

    if 语句也可以嵌套使用  

    if 条件表达式1  
    then  
    if 条件表达式2  
    then  
    命令列表  
    else  
    if 条件表达式3  
    then  
    命令列表  
    else  
    命令列表  
    fi  
    fi  
    else  
    命令列表  
    fi 

     

    8.1.2     多分支格式

     

    if test -f "$1"  
    then  
    lpr $1  
    elif test -d "$1" #elif 同else if  
    then  
    (cd $1;lpr $1)  
    else  
    echo "$1不是文件或目录"  
    fi

     

    8.2          case

    8.2.1     格式

    case $newval in

    1)          #这里是可能值1

    echo 1

    ;;      #表示第一个分支结束

    2)           #这里是可能值 2

    echo 2

    ;;      #第二个分支结束

    *)      #表示其他可能值,必须在最后,否则他后面的语句无法执行

    echo unkown

    esac    #case 语句结束

    8.2.2      

    8.3          while /until

    8.3.1     格式

    while 表达式

    do

    命令列表

    done

     

    8.3.2     例如:

    Sum=0  
    i=0  
    while true #true是系统的关键词 表示真  
    do  
    i=`expr $i + 1`  
    Sum=`expr $Sum + $i`  
    if [ $i = "100" ]  
    then  
    break;  
    fi  
    done  
    echo $i $Sum  
    最后这个程序显示的是 100 5050 

     

    下面将这个程序再改动一下  


    Sum=0  
    i=0  
    while [ $i != "100" ]  
    do  
    i=`expr $i + 1`  
    Sum=`expr $Sum + $i`  
    done  
    echo $i $Sum  

    改动后的程序运算结果和上面是一样 但程序比上面的要简练  

    在这个循环中还可以以until做为测试条件 它正好与while测试的条件相反,也就是当条件为假时将继续执行循环体内的语句,否则就退出循环体,下面还用这个例子.  


    Sum=0  
    i=0  
    until [ $i = "100" ]  
    do  
    i=`expr $i + 1`  
    Sum=`expr $Sum + $i`  
    done  
    echo $i $Sum  
    当i不等于100时循环 就是当条件为假时循环,否则就退出,而第一个例子是当i不等于100  
    时循环,也就是测试条件为真时循环. 

     

    8.4          for

    8.4.1     枚举用法

    8.4.1.1    格式

     

     

    for 变量 in 名字列表  
    do  
    命令列表  
    done 

     

    8.4.1.2    格式

    for n in {1..10}

    do

    echo $n

    done

     

    for letter in a b c d e;

    do

    echo $letter

    done

     

     

    8.4.2     文件用法

     

    8.4.2.1    格式

    for file in *

    do

           echo $file

    done

     

    8.4.2.2    例子

     

    for File in a1 a2 a3 a4 a5  
    do  
    diff aa/$File bb/$File  
    done 

     

     

    8.4.3     累加格式

    for (( i=1;$i<10;i++))

    do

    echo $i

    done

     

    for(( i=1;$i<10;i=$[$i+1’ ])

    do

    echo $i

    done

    8.4.4      

    8.5          其他循环控制语句

    break 命令不执行当前循环体内break下面的语句从当前循环退出.  
    continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行.

     

    8.6          逻辑判断的表达

     

    一、判断文件的属性  

    格式:-操作符 filename  
    -e 文件存在返回1, 否则返回0  
    -r 文件可读返回1,否则返回0  
    -w 文件可写返回1,否则返回0  
    -x 文件可执行返回1,否则返回0  
    -o 文件属于用户本人返回1, 否则返回0  
    -z 文件长度为0返回1, 否则返回0.  
    -f 文件为普通文件返回1, 否则返回0  
    -d 文件为目录文件时返回1, 否则返回0  

    二、测试字符串  
    字符串1 = 字符串2 当两个字串相等时为真  
    字符串1 != 字符串2 当两个字串不等时为真  
    -n 字符串      当字符串的长度大于0时为真  
    -z 字符串      当字符串的长度为0时为真  
    字符串       当串字符串为非空时为真  

    三、测试两个整数关系  
    数字1 -eq 数字2     两数相等为真  
    数字1 -ne 数字2     两数不等为真  
    数字1 -gt 数字2     数字1大于数字2为真  
    数字1 -ge 数字2     数字1大于等于数字2为真  
    数字1 -lt 数字2     数字1小于数字2为真  
    数字1 -le 数字2     数字1小于等于数字2为真  

    四、逻辑测试  
    -a         与  
    -o        或  
    !        非 

     

    9           shell中的表达式

    9.1          shell 输出重定向

    9.1.1     管道  |

    就管道符前的命令的输出作为管道符后的命令的输入。

     

    ls | grep ‘.txt’

    将ls的输出作为grep 的输入。 grep从输入中找出所有包含.txt的行。

     

    9.1.2     输出  >

    将右尖括号前的命令的输入重定向到尖括号后的文件中。

     

    例如:

    ls *.sh > list.txt

    将当前目录下所有末尾名为sh的文件的列表写入到list.txt

     

    9.1.3     输入 <

    将左箭头后面的文件作为左箭头前的命令的输入。

    例如:

    grep “a” < test.sh

    将test.sh中找到所有包含a的行

     

    9.1.4     错误输出重定向

    默认bash有3个标准输入输出设备。

    0 标准输入

    1 标准输出

    2错误输出

     

    如果执行脚本的时候发生错误,会输出到2上。

    要想就将错误的输出也输出在标准输出上,需要重定向。

    例如:

    ./test.sh > a.log 2>&1

    后面2>&1就是将标准错误的输出重定向到标准输出上。

     

    9.2          tee

    9.2.1     将此命令的输入分叉,一支输出到屏幕一支可以重定向到其他位置。

    例如: ./test.sh | tee >a.txt 2>&1

    运行test.sh,通过tee输出到a.txt,同时屏幕上可以看到输出。并且将错误输出重定向到标准输出( 2>&1 )

    9.3          cpio

    9.3.1     文件或目录打包

    9.3.1.1    含子目录打包

      find . -name '*.sh' | cpio -o > shell.cpio

      将当前目录及其子目录下的sh文件打包成一个文件库为shell.cpio。 

    9.3.1.2    不含子目录的打包

    ls *.sh | cpio -o > shell.cpio

      将当前目录下的sh文件(不含子目录)打包成一个文件库为shell.cpio。 

    9.3.2      压缩

    文件打包完成后,即可用Unix中的compress命令(/usr/bin下)压缩打包文件。对一般的文本文件,压缩率较高,可达81%。

    例如:compress shell.cpio则将文件库压缩为shell.cpio.Z(自动添加.Z并删除shell.cpio )。 

    9.3.3      解压

    uncompress shell.cpio.Z则自动还原为shell.cpio。 

    9.3.4      解包展开

    将按原目录结构解包展开到当前所在目录下。若以相对路径打包的,当解包展开时,也是以相对路径存放展开的文件数据;若以绝对路径打包的,当解包展开时,也是以绝对路径存放展开的文件数据。因此注意若为相对路径,应先进入相应的目录下再展开。 

     

     cd /u1

     cpio –id < shell.cpio 解压到当期目录。 

     cpio –iud < shell.cpio则文件若存在将被覆盖,即强制覆盖。 

     cpio –id < shell.cpio env.sh 解压缩env.sh

    9.3.5      显示包内的文件

      cpio –it < shell.cpio  

     

    9.4          exec

    9.4.1     将此命令后的参数作为命令在当前的shell中执行,当前的shell或者脚本不在执行。

    例如: exec ls

    当前进程替换为ls,执行结束后就退出了。

    例如:在a.sh 中包含

    exec b.sh 则当a.sh 执行到此句后,被b.sh替换,a.sh中此句后的语句不会再被执行。

     

    9.5          fork

    9.5.1     将此命令的参数,新建一个进程来执行

     

    例如:在a.sh 中包含

    fork b.sh 则当a.sh 执行到此句后,被b.sh替换,a.sh中此句后的语句继续执行。b.sh在新的进程中同时执行。

     

    9.6          expr

    9.6.1     expr argument operator argument

    9.6.2     一般用于整数的运算。 例如:

    #set newval=1

    #echo $newval

    1

    #set newval=`expr $newval + 1`

    #echo $newval

    2

    #set newval=$newval+1

    #echo $newval

    2+1

     

    9.7          test

    9.7.1     测试,通常用在需要判断的语句后面,例如:if,while,等等。

    9.7.2     很多时候可以和中括号[]互换,我不知道区别是什么。

    9.7.3     例子:

    i=1

    if test”$ i” == “1”

    then

    echo true

    else

    echo false

    fi

     

    9.8          exit

    退出当前的shell,执行结果可以在shell中用$?查看

    例如:exit 2

    9.9          read

    从标准输入读取数据。

    例: 
    $ read var1 var2 var3 
    Hello my friends 
    $ echo $var1 $var2 $var3 
    Hello my friends 
    $ echo $var1 
    Hello

     

    9.10       shift

    9.10.1 每次调用的时候,将参数列表中的第一个参数去掉。这样可以循环得到第一个参数。

    9.10.2 例子

    #cat t.sh

    sum=0

    until [ $# -eq 0 ]

    do

    echo $*

    sum=`expr $sum + $1`

    shift

    done

    echo result is: $sum

     

    #./t.sh 1 2 3

    1 2 3

    2 3

    3

     

     

    10       附件一:例子脚本

    10.1        脚本1

     

    10.2        

    11       附件二:Linux 易被遗漏的命令解析

    11.1       grep

    11.1.1 grep ‘string’ filename

    11.1.1.1e.i.: grep ‘list’ mytxt.txt 在mytxt.txt中寻找包含list字符串的所有行

    11.1.2 “-v” : 相反的。 即不包含字符串。

    11.1.2.1e.i.: grep –v ‘list’ mytxt.txt

    11.1.3 cat mytxt | grep ‘list’

    将cat mytxt作为源, 从中查找包含list字符串的行

    11.2       find

    11.2.1 -atime n : 指查找系统中最后n*24小时访问的文件;

    11.2.2 -ctime n : 指查找系统中最后n*24小时被改变状态的文件;

    11.2.3 -mtime n : 指查找系统中最后n*24小时被修改的文件。

    11.2.4 在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行
    find ./ -name "*.txt" -exec grep "bin" {} \;

    11.2.5 在当前目录下(包含子目录),删除所有txt文件
    find ./ -name "*.txt" -exec rm {} \;

     

    11.3       du

    11.3.1 显示文件的大小

    11.3.2 i.e.

    #du *.txt

    1230   myfile1.txt

    456    myfile2.txt

     

    11.4       awk

    11.4.1 提取输入中的某个参数

    11.4.2 i.e. 提取输入中每一行的第一个参数

    #echo `du *.txt | awk ‘{print $1}’`

    1230 456

    提取子字符串

    #echo `du *.bin | awk '{print substr($1,2,3)}'`

     

    11.5       前后台运行

    11.5.1 将某个程序在后台启动起来,只需要在命令的最后加上 & 符号。

    例如: ./test.sh &

     

    11.5.2 将当前正在运行的程序切换到后台

    11.5.2.1当按下^z的时候,当前的应用程序就会切换到后台,但是此时的状态是停止的状态。

    11.5.2.2使用jobs命令可以看到当前在后台运行的程序的列表。

    例如:jobs

    [1]+ stopped top

    [2]+stopped find | grep *.txt > a.log

     

    11.5.2.3使用bg命令可以将某个后台程序继续运行。

    #bg %2

    #jobs

    [1]+ stopped top

    [2]+ Running find | grep *.txt > a.log

     

    11.5.3 将后台运行的程序切回到前台

    #fg %2

    将find 命令切回到前台

    11.6       shell的执行选项

     

    -n 测试shell script语法结构,只读取shell script但不执行 
    -x 进入跟踪方式,显示所执行的每一条命令,用于调度 
    -a Tag all variables for export 
    -c "string" 从strings中读取命令 
    -e 非交互方式 
    -f 关闭shell文件名产生功能 
    -h locate and remember functions as defind 
    -i 交互方式 
    -k 从环境变量中读取命令的参数 
    -r 限制方式 
    -s 从标准输入读取命令 
    -t 执行命令后退出(shell exits) 
    -u 在替换中如使用未定义变量为错误 
    -v verbose,显示shell输入行

     

    11.7       alias

    建立别名

    alias dir ls

    11.8        xargs

    执行本命令的第一个参数,并将xargs的输入作为被执行命令的参数

    例如:

    find . -name '*.c' | xargs cat

    将本目录及其子目录下所有的C文件使用cat命令显示其内容。

     

    12       附件三:Bash中影响环境变量的命令

     

    Shell有若干以变量为工作对象的命令,其中有些命令似乎重复了。例如,可以用declare、export和typeset命令来创建全局(或转出)的变量。typeset命令是declare的同义词。

     

    Declare 命令

     

    语法:

    declare [options] [name [= value]]

     

    摘要:

    用于显示或设置变量。

    declare命令使用四个选项:

    -f   只显示函数名

    -r   创建只读变量。只读变量不能被赋予新值或取消设置,除非使用declare或者typeset命令

    -x   创建转出(exported)变量

    -i   创建整数变量。如果我们想给一个整数变量赋予文本值,实际上是赋予0使用+ 代替-,可以颠倒选项的含义。

     

    如果没有使用参数,则declare显示当前已定义变量和函数的列表。让我们关注一下-r选项:

     

    $ declare  –r  title=" paradise Lost"

    $ title = " Xenogenesis"

    bash: title: read-only variable

    $ declare title= " Xenogenesis"

    $ echo $title

    Xecogenesis

    $ typeset title = " The Longing Ring”

    $ echo $title

    The Longing Ring

     

    这个示例表明,只有declare或typeset命令可以修改只读变量的值。

     

     

     

    export命令

     

    语法:

     export [options] [name [= value]]

    摘要:

    用于创建传给子Shell的变量。

    export命令使用四个选项:

    --   表明选项结束。所有后续参数都是实参

    -f   表明在“名-值”对中的名字是函数名

    -n   把全局变量转换成局部变量。换句话说,命名的变量不再传给子Shell

    -p   显示全局变量列表

     

    如果没有用参数,则假定是一个-p参数,并且显示出全局变量的列表:

     

    $ export

    declare –x ENV = "/home/medined/ . bashrc"

    declare –x HISTFILESIZE = "1000"

    declare –xi numPages = "314"

    declare –xr title = "The Longing Ring"

    declare –xri numChapters = "32"

     

    这种显示的一个有趣的特性是,它告诉我们哪些变量只能是整数、是只读的,或者二者皆可。

     

    let命令

     

    语法:

    let expression

    摘要:

    用于求整数表达式的值。

     

    let命令计算整数表达式的值。它通常用来增加计数器变量的值,如例5-9所示。

     

    例5-9 let——使用let命令

    # ! /bin/bash

    count=1

    for element in $@

    do

       echo " $element is element $count"

       let count+=1

    done

     

    下面是这个脚本运行结果示例:

    $ chmod + x let

    $ . /let one two three

    one is element 1

    two is element 2

    three is element 3

     

    注意:如果我们习惯在表达式中使用空格,那么要用双引号把表达式括起来,如:

    let "count + =1"

    否则会导致语句错误。

     

    local 命令

     

    语法:

           local [name [= value]]

    摘要:

           用于创建不能传给子Shell的变量。这个命令仅在过程内部有效。

     

    简单说来,local命令创建的变量不能被子Shell存取。因此,只能在函数内部使用local命令。我们可以在命令行或脚本中使用“变量=值”这种形式的赋值命令。如果使用local时不带实参,那么当前已定义的局部变量列表就送往标准输出显示。

     

    readonly命令

     

    语法:

           readonly [options] [name[ = value]]

    摘要:

    用于显示或者设置只读变量。

    Readonly命令使用两个选项:

    --    表明选项结束。所有后续参数都是实参

    -f    创建只读函数

     

    如果没有用参数,则readonly显示当前已定义的只读变量和函数的列表。

     

    set命令

     

    语法:

           set [--abefhkmnptuvxidCHP] [-o option] [name [= value]]

    摘要:

    用于设置或者重置各种Shell选项。

     

    set 命令可实现很多不同的功能——并非其中所有的功能都与变量有关。由于本节的其他命令重复了通过set命令可用的那些变量选项,所以这里对set命令不做详细说明。

     

    shift命令

     

    语法

    shift [n]

    摘要:

    用于移动位置变量。

     

    shift命令调整位置变量,使$3的值赋予$2,而$2的值赋予$1。当执行shift命令时,这种波动作用影响到所定义的各个位置变量。往往使用shift命令来检查过程参数的特定值——如为选项设置标志变量时。

     

    typeset命令

     

    语法:

    typeset [options] [name [= value]]

    摘要:

    用于显示或者设置变量。

     

    typeset 命令是declare命令的同义词。

     

     

    unset命令

     

    语法:

    unset [options] name [name …]

    摘要:

    用于取消变量定义。

    unset命令使用两个选项:

    --  表明选项结束,所有后续参数都是实参

    -f  创建只读函数

     

    unset命令从Shell环境中删除指定的变量和函数。注意,不能取消对PATH、IFS、PPID、PS1、PS2、UID和EUID的设置。如果我们取消RANDOM、SECONDS、LINENO或HISTCMD等变量的设置,它们就失去特有属性。

     

    原文地址:https://www.cnblogs.com/chen-lhx/p/5743438.html

    展开全文
  • shell脚本常用命令

    千次阅读 2019-06-06 22:47:59
    一.diff命令 diff 命令:是用来比较两个文件或目录的不同,并且是以行为单位来比对的。一般是用在 ASCII 纯文本文件的比对上。由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上...

    一.diff命令

    diff 命令:是用来比较两个文件或目录的不同,并且是以行为单位来比对的。一般是用在 ASCII 纯文本文件的比对上。由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上对比上,能够借由 diff 创建的分析档,以处理补丁(patch)功能的文件。

    diff [options] target1 target2
    diff file1 file2
    diff direcory1 directory2
    

    diff 在比较文件过程中结果读取方式

    [num1 , num2][a|c|d][num3,num4]
    num1,num2 表示在第一个文件中的行数
    a 表示添加 ----add
    c 表示更改 ----change
    d 表示删除 ----delete
    < 表示第一个文件中的内容, > 表示第二个文件中的内容, --- 分割线
    num3,num4 表示在第二个文件中的行数
    2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中
    的第二行和第四行
    

    在这里插入图片描述
    diff 在比较目录过程中结果的读取

    Only in directroy/: filename
    directory 表示在那个目录中
    filename 表示在这个目录
    

    diff 中常用的参数

    可用man diff查询具体用法

    -b 或 --ignore-space-change  不检查空格字符的不同
    -B 或 --ignore-blank-lines  不检查空白行
    -c  显示全部内文,并标出不同之处
    -i 或 --ignore-case  不检查大小写的不同
    -p :若比较的文件为 C 语言的程序码文件时,显示差异所在的
    函数名称;
    -q 或 --brief :仅显示有无差异,不显示详细的信息
    -r 或 --recursive :比较子目录中的文件
    -u 以合并的方式来显示文件内容的不同pacth
    

    -b 不检查空格字符的不同

    test与test不同之处在于多了空格,使用-b则发现没有不同。
    在这里插入图片描述
    -B 不检查空白行

    在这里插入图片描述

    -c 显示全部内文,并标出不同之处
    在这里插入图片描述
    -i 不检查大小写的不同
    在这里插入图片描述
    -q 仅显示有无差异,不显示详细的信息
    在这里插入图片描述
    -r 或 --recursive :比较子目录中的文件
    在这里插入图片描述
    -u 以合并的方式来显示文件内容的不同
    在这里插入图片描述

    二.pacth

    patch 命令读取如何更改文件的源文件指示信息,然后应用这些更改。源文件包含由 diff 命令产生的差别列表(或者 diff 列表)。差异列表是比较两个文件和构建关于如何纠正差别的指示信息的结果。缺省情况下,patch 命令使用从标准输入读入的源文件,但是使用 -i 标志和 PatchFile 变量可以覆盖此设置。

    -b或–backup  备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它
    -p        后面可以接“取消几层目录”的意思。
    -R :代表还原,将新的文件还原成原来旧的版本
    patch [options] file.old file.path
    

    首先要安装patch服务

    yum install patch -y
    diff -u test test1 > test.patch           ##以合并方式生成文件内容不同并导入test.patch
    patch test test.patch                     ##给test打补丁
    

    在这里插入图片描述

    三.cut

    cut 命令多用与字符截取

    cut -d指定分隔符
    cut -f指定截取的列
    cut -c指定截取的字符位置

    以:为分隔符截取文件passwd第一列
    在这里插入图片描述
    以:为分隔符截取文件passwd第一,三列
    在这里插入图片描述
    截取passwd文件位置第二个字符
    在这里插入图片描述
    截取passwd文件位置第二,三字符
    在这里插入图片描述截取passwd文件位置第二到四中的所有字符
    在这里插入图片描述

    四.sort

    多用于字符排序

    sort -n纯数字排序
    sort -r倒序
    sort -u去掉重复数字
    sort -o输出到指定文件中
    sort -t指定分隔符
    sort -k指定要排序的列

    创建文件file写入数字
    在这里插入图片描述
    sort -n纯数字排列
    在这里插入图片描述
    sort -nr file 纯数字倒序排列
    在这里插入图片描述
    sort -nu file去掉重复数字纯数字排列
    在这里插入图片描述
    sort -nu file -o westos 将上一个排列好的文件导入westos
    在这里插入图片描述
    vim file 创建新的file
    在这里插入图片描述
    以:为分隔符并以第二列按纯数字排列
    在这里插入图片描述

    五.uniq

    对重复字符做相应的处理

    uniq -u显示唯一的行
    uniq -d显示重复的行
    uniq -c每行显示一次并统计重复次数

    在这里插入图片描述
    在这里插入图片描述
    实验:
    抓取登陆你的主机的ip并显示最多的次数

    last -i | grep 0.0.0.0 -v | cut -d " " -f 14 | uniq -c | sort -nr  | head -n 1
    含义:显示ip,过滤0.0.0.0的行,取第14个字符开始的ip列,统计每个ip出现的次数,反向排序,取最高的值也就是第一行
    或者
    last -i | grep -E "0.0.0.0|wtmp " -v | awk '{print $3}' | uniq -c |sort -nr | head -n 1
    

    在这里插入图片描述在这里插入图片描述

    六.&&和||

    && 用来执行条件成立后执行的命令
    || 用来执行条件不成立后执行的命令

    测试:
    编写一个脚本,测试网络的通畅

    -w wait 等待时间  不通的话时间会很长
    -c count 次数
    -e 颜色的设定
    0m 关掉颜色的设定属性
    

    没有颜色
    在这里插入图片描述
    在这里插入图片描述

    有颜色显示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    七.tr命令

    tr,translate的简写,意思是转化,转变,转换。用来从标准输入中通过替换或删除操作进行字符转换。
    在这里插入图片描述
    编写脚本将小写转化成大写

    vim upper.sh
    
    #!/bin/bash
    echo $1 | tr 'a-z' 'A-Z'
    

    在这里插入图片描述

    八.test命令

    功能:检查文件类型和比较值。
    lt 小于,le小于等于,ge 大于等于,gt 大于
    在shell中,test命令 = [ ],=和==效果一样。

    a=1
    b=1    ##先赋值
    
    test "$a" = "$b" && echo yes || echo no     ##判断a=b
    [ "$a" = "$b" ] && echo yes || echo no       ##判断a=b
    [ ! "$a" = "$b" ] && echo yes || echo no     ##判断a=b不成立是真还是假
    [ "$a" != "$b" ] && echo yes || echo no      ##判断a不等于b
    
    [ "$a" -eq "$b" ] && echo yes || echo no    ##相等
    [ "$a" -ne "$b" ] && echo yes || echo no       ##不相等
    
    [ "$a" -lt "$b" ] && echo yes || echo no      ##小于
    [ "$a" -le "$b" ] && echo yes || echo no      ##小于等于
    
    [ "$a" -gt "$b" ]  && echo yes || echo no      ##大于
    [ "$a" -ge "$b" ] && echo yes || echo no     ##小于等于
    
    [ "$a" -lt "1" -a "$b" -gt "5" ] && echo yes || echo no     ##a小于1,且b大于5,两个都成立才输出yes
    [ "$a" -lt "1" -o "$b" -gt "5" ] && echo yes || echo no     ##a小于1或b大于5,有一个成立则输出yes
    

    在这里插入图片描述在这里插入图片描述
    测试:
    要求:当根分区使用量大于80%报警,并监控脚本执行情况将结果输出到日志文件/var/log/messages中。
    在这里插入图片描述

    vim checkstorage.sh
    
    #!/bin/bash
    [ "`df -h / | tail -n 1 | cut -d " " -f 15 | cut -d "%" -f 1 `" -ge "30" ] && {         ##为了实验效果明显写的30
            echo "Warning: /is full!" >> /var/log/messages
    }
    at now+1min <<-EOF        设置定时任务
    checkstorage.sh
    EOF
    
    chmod +x checkstorage.sh     给脚本添加执行权限
    ls -l checkstorage.sh
    at -l    查看定时任务列表
    at -c  +num    查看任务内容
    

    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 基本的bash shell命令

    千次阅读 2017-09-13 22:59:47
    大多数linux发行版的默认都是GUNbash shell,本次将介绍bash shell的一些基本特征,bashshell基本命令来操作linux文件和目录。 1.启动shell Gun bash能提供对linux系统的交互式访问,它是作为普通的程序运行的,...

    大多数linux发行版的默认都是GUNbash shell,本次将介绍bash shell的一些基本特征,bashshell基本命令来操作linux文件和目录。

    1. 启动shell

    Gun bash能提供对linux系统的交互式访问,它是作为普通的程序运行的,通常是在用户登录终端启动,登录时系统启动的shell依赖于用户账户配置。

    /etc/passwd文件包含了所有系统用户列表,以及每个用户的基本配置信息,以下是从/etc/passwd中取出的样例条目。

     

    每个条目有七个字段,字段之间用冒号分隔。系统使用字段中的数据来赋予用户账户某些特定特性。现在先将注意力放在后一个字段上, 该字段指定了用户使用的shell程序

    在前面的/etc/passwd样例条目中,用户root使用/bin/bash作为自己的默认shell程序。这意 味着当root登录Linux系统后,bash shell会自动启动。 尽管bash shell会在登录时自动启动,但是,是否会出现shell命令行界面(CLI)则依赖于所使用的登录方式。如果采用虚拟控制台终端登录,CLI提示符会自动出现,你可以输入shell命令。 但如果是通过图形化桌面环境登录Linux系统,你就需要启动一个图形化终端仿真器来访问shell CLI提示符。

    2.shell提示符

    一旦启动了终端仿真软件包或者登录Linux虚拟控制台,你就会看到shell CLI提示符。提示符 就是进入shell世界的大门,是你输入shell命令的地方。 默认bash shell提示符是美元符号($),这个符号表明shell在等待用户输入。不同的Linux发 行版采用不同格式的提示符。在Ubuntu Linux系统上,shell提示符看起来是这样的: 

    [root@shell-yk ~]#   #号代表管理员  $代表普通用户

    除了作为shell的入口,提示符还能够提供其他的辅助信息。在上面的两个例子中,提示符中 显示了当前用户ID名shell-yk。

    hell提示符并非一成不变。你可根据自己的需要改变它,shell中另一个大有帮助的东西是bash手册。

    3.bash手册

     

    大多数Linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册。熟悉手册对使用各种Linux工具大有裨益,尤其是在你要弄清各种命令行参数的时候。man命令用来访问存储在Linux系统上的手册页面。在想要查找的工具的名称前面输入man命令,就可以找到那个工具相应的手册条目输入命令man xterm就可以进入该页面。例如我们要看ping的手册页面 输入:man ping

    如下:

    当使用man命令查看命令手册页的时候,这些手册页是由分页程序(pager)来显示的。分页 程序是一种实用工具,能够逐页显示文本。可以通过点击空格键进行翻页,或是使用回车键逐行 查看。另外还可以使用箭头键向前向后滚动手册页的内容(假设你用的终端仿真软件包支持箭头 键功能)。 读完了手册页,可以点击q键退出。退出手册页之后,你会重新获得shell CLI提示符,这表 示shell正在等待接受下一条命令。

    手册页将与命令相关的信息分成了不同的节。每一节惯用的命名标准如下:

    并不是每一个命令的手册页都包含表图中列出的所有节。还有一些命令的节名并没有在上面的节名惯用标准中列出。

    一个命令偶尔会在多个内容区域都有对应的手册页。比如说,有个叫作hostname的命令。 手册页中既包括该命令的相关信息,也包括对系统主机名的概述。要想查看所需要的页面,可以 输入man section# topic。对手册页中的第1部分而言,就是输入man 1 hostname。对于手 册页中的第7部分,就是输入man 7 hostname。 你也可以只看各部分内容的简介:输入man 1 intro阅读第1部分,输入man 2 intro阅读 第2部分,输入man 3 intro阅读第3部分,等等。 手册页不是唯一的参考资料。还有另一种叫作info页面的信息。可以输入info info来了解 info页面的相关内容。 另外,大多数命令都可以接受-help或--help选项。例如你可以输入hostname -help来 查看帮助。关于帮助的更多信息,可以输入help。(看出这里面的门道没?) 显然有不少有用的资源可供参考。不过,很多基本的shell概念还是需要详细的解释。在下一 节中,我们要讲讲如何浏览Linux文件系统。 

    4.浏览文件系统 
    当登录系统并获得shell命令提示符后,你通常位于自己的主目录中。一般情况下,你会想去逛逛主目录之外的其他地方。先了解一下Linux文件系统。

    Linux文件系统 如果你刚接触Linux系统,可能就很难弄清楚Linux如何引用文件和目录,对已经习惯 Microsoft Windows操作系统方式的人来说更是如此。在继续探索Linux系统之前,先了解一下它 的布局是有好处的。 你将注意到的第一个不同点是,Linux在路径名中不使用驱动器盘符。在Windows中,PC上 安装的物理驱动器决定了文件的路径名。Windows会为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储其中的文件。 

    举个例子,在Windows中经常看到这样的文件路径: 
    c:\Users\Rich\Documents\test.doc 

    这种Windows文件路径表明了文件test.doc究竟位于哪个磁盘分区中。如果你将test.doc保存在 闪存上,该闪存由J来标识,那么文件的路径就是J:\test.doc。该路径表明文件位于J盘的根目录下。
     Linux则采用了一种不同的方式。Linux将文件存储在单个目录结构中,这个目录被称为虚拟 目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。
     Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按 照访问它们的目录路径一一列出,这点跟Windows类似。

    在Linux中,你会看到下面这种路径: 
    /home/Rich/Documents/test.doc 

    这表明文件test.doc位于Documents目录,Documents又位于rich目录中,rich则在home目录中。 要注意的是,路径本身并没有提供任何有关文件究竟存放在哪个物理磁盘上的信息。 Linux虚拟目录中比较复杂的部分是它如何协调管理各个存储设备。在Linux PC上安装的第 一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。 Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚 拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然 而实际上它们却存储在另外一个驱动器中。 通常系统文件会存储在根驱动器中,而用户文件则存储在另一驱动器中如下:

    上图展示了计算机中的两块硬盘。一块硬盘和虚拟目录的根目录(由正斜线/表示)关联起 来。剩下的硬盘就可以挂载到虚拟目录结构中的任何地方。在这个例子中,第二块硬盘被挂载到 了/home位置,用户目录都位于这个位置。 Linux文件系统结构是从Unix文件结构演进过来的。在Linux文件系统中,通用的目录名用于 表示一些常见的功能。

    常见的linux目录名称如下:

    常见的目录名均基于文件系统层级标准(filesystem hierarchy standard,FHS)。很多Linux发 行版都遵循了FHS。这样一来,你就能够在任何兼容FHS的Linux系统中轻而易举地查找文件。 

    在登录系统并获得一个shell CLI提示符后,会话将从主目录开始。主目录是分配给用户账户 的一个特有目录。用户账户在创建之后,系统通常会为其分配一个特有的目录。 可以使用图形界面在虚拟目录中跳转。要想在CLI提示符下切换虚拟目录,需要使用cd命令。

    5.绝对文件路径

     用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中 该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。 绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指 向usr目录所包含的bin目录下的用户二进制文件,可以使用如下绝对文件路径: 

    /usr/bin 

    使用绝对文件路径可以清晰表明用户想切换到的确切位置。要用绝对文件路径来切换到文件 系统中的某个特定位置,只需在cd命令后指定全路径名:

    [root@shell-yk ~]# cd /usr/bin 

    在上面的例子中,提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这 个波浪号被/usr/bin替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。 波浪号表明shell会话位于你的主目录中。在切换出主目录之后,如果提示符已经进行了相关配置 的话,绝对文件路径就会显示在提示符中。 

    如果没有配置好提示符来显示当前shell会话的绝对文件路径,也可以使用shell命令来显示所 处的位置。pwd命令可以显示出shell会话的当前目录,这个目录被称为当前工作目录。pwd命令 的用法如下

    [root@shell-yk bin]# pwd
    /usr/bin

    还可以从Linux虚拟目录中的任何一级跳回主目录


    6.文件和目录列表 

    要想知道系统中有哪些文件,可以使用列表命令(ls)。

    基本列表功能 ls命令基本的形式会显示当前目录下的文件和目录: 

     

     

    注意,ls命令输出的列表是按字母排序的(按列排序而不是按行排序)。如果用户用的是支 持彩色的终端仿真器,ls命令还可以用不同的颜色来区分不同类型的文件。LS_COLORS环境变 量控制着这个功能。(第6章中会讲到环境变量。)不同的Linux发行版根据各自终端仿真器的能力 设置这个环境变量。 如果没安装彩色终端仿真器,可用带-F参数的ls命令轻松区分文件和目录。使用-F参数可 以得到如下输出: 

     

    -F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行 文件,以便用户找出可在系统上运行的文件。 基本的ls命令在某种意义上有点容易让人误解。它显示了当前目录下的文件和目录,但并没有 将全部都显示出来。Linux经常采用隐藏文件来保存配置信息。在Linux上,隐藏文件通常是文件名 以点号开始的文件。这些文件并没有在默认的ls命令输出中显示出来,因此我们称其为隐藏文件。要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。下面是一个带有-a参数 的ls命令的例子:

    所有以点号开头的隐藏文件现在都显示出来了。注意,有三个以.bash开始的文件。它们是bash shell环境所使用的隐藏文件, -R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中 的文件。如果目录很多,这个输出就会很长。以下是-R参数输出的简单例子

     注意,首先-R参数显示了当前目录下的内容,也就是之前例子中用户home目录下的那些文 件。另外,它还显示出了用户home目录下所有子目录及其内容

    显示长列表 

    在基本的输出列表中,ls命令并未输出太多每个文件的相关信息。要显示附加信息,另一个 常用的参数是-l。-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息

    这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有 用信息。输出的第一行显示了在目录中包含的总块数。在此之后,每一行都包含了关于文件(或 目录)的下述信息: 文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);  文件的权限; 文件的硬链接总数; 文件属主的用户名; 文件属组的组名; 文件的大小(以字节为单位); 文件的上次修改时间; 文件名或目录名。 -l参数是一个强大的工具。有了它,你几乎可以看到系统上任何文件或目录的大部分信息。
     在进行文件管理时,ls命令的很多参数都能派上用场。如果在shell提示符中输入man ls, 就能看到可用来修改ls命令输出的参数有好几页。 别忘了可以将多个参数结合起来使用。你不时地会发现一些参数组合不仅能够显示出所需的 内容,而且还容易记忆,例如ls  –alF。 

    过滤输出列表 
    由前面的例子可知,默认情况下,ls命令会输出目录下的所有非隐藏文件。有时这个输出会 显得过多,当你只需要查看单个少数文件信息时更是如此。 幸而ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件 或目录。 这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过 滤器

    7.处理文件(下面简单介绍常用的命令)

    1)我们创建一个文件,比如创建一个qq.txt,可以用touch命令创建

    2)复制文件

    对系统管理员来说,在文件系统中将文件和目录从一个位置复制到另一个位置可谓家常便 饭。cp命令可以完成这个任务。

    3)重命名文件

    4)删除文件

    5)创建目录(创建一个csdn目录)

    6)删除csdn目录

    查看整个文件 如果手头有一个很大的文本文件,你可能会想看看里面是什么内容。在Linux上有3个不同的 命令可以完成这个任务。 

    1. cat命令 cat命令是显示文本文件中所有数据的得力工具。 

    没什么特别的,就是文本文件的内容而已。这里还有一些可以和cat命令一起用的参数,可 能对你有所帮助。 

    -n参数会给所有的行加上行号。 

    这个功能在检查脚本时很有用。如果只想给有文本的行加上行号,可以用-b参数。 

    如果不想让制表符出现,可以用-T参数。 

    希望对您有所帮助,再见

    展开全文
  • 二,对于 JavaEE 和 Python 程序员来说,工作的需要,你的老大会要求你编写一些 Shell 脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。 三,对于大数据程序员来说,需要编写 Shell 程序来管理...
  • 用C语言实现了Linux中Shell的部分功能,包括ls rm echo等基本常用命令,每个命令都有详细代码实现。
  • Shell基本命令.doc

    2013-02-28 15:03:35
    Shell基本命令,有关linux下shell的命令
  • Linux实验Shell命令操作

    2015-05-29 22:32:11
    linux上机实验的shell命令操作实验报告。含有代码和解释,欢迎下载
  • Shell脚本基础及基本常用命令

    万次阅读 2018-06-16 11:10:07
    一、shell基本信息 1.概述 脚本语言(shell、python):解释性语言,用解释器解释 运行效率低 | c、java:描述性语言,运行效率高 #!/bin/bash 幻数 ,在脚本运行的时候先进行该程序 以.sh结尾会有高亮显示 ...
  • LINUX Shell常用命令

    万次阅读 多人点赞 2019-02-24 00:40:48
    Linux Shell常用shell命令 一、文件、目录操作命令 1、ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性,包括大小,日期,符号...
  • Linux 基础操作、常用shell命令、vi常用命令、man帮助手册 一、简述 记录简单的Linux 基础操作、常用shell命令、vi编辑器常用命令、man帮助手册的使用。 二、Linux 基础操作 1、按 Ctrl+Alt+t 快捷键或者双击...
  • Shell脚本基本命令

    千次阅读 2015-06-01 18:49:11
    shell脚本运行方式 $sh script.sh $sh /home/path/script.sh $chmod a+x script.sh ; $./script.sh echo的三种使用方式 echo hello world 不能包含一些特殊关键字,如分号; echo "hello word" 不能包含一些特殊...
  • Hbase shell基本查询命令

    千次阅读 2019-09-26 16:47:50
    #查询前十条数据 例:scan 'book:info',{LIMIT=>10} #查询前十条c:q列的数据 例:scan 'book:info',{COLUMNS=>'c:q',LIMIT=>10} #查询rowkey从'1000'到'2000',列族为c:q的数据 例:scan 'book:info',{...
  • vxworks shell命令大全

    2013-03-05 09:06:23
    详细记录了vxworks的shell命令,对于初学vxworks的是极好的资料
  • Shell常用命令总结

    千次阅读 2019-04-14 20:47:49
    Shell常用命令总结 1  ls命令:列出文件 ls -la 列出当前目录下的所有文件和文件夹 ls a* 列出当前目录下所有以a字母开头的文件 ls -l *.txt 列出当前目录下所有后缀...
  • shell 远程执行命令

    千次阅读 2018-08-27 10:00:48
     经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了。一下介绍两种shell命令远程执行的方法。 前提条件:  配置ssh免密码登陆 对于简单的...
  • Shell基本命令.rar

    2011-09-16 12:10:42
    Shell基本命令.rar
  • Linux——常用shell命令汇总

    千次阅读 多人点赞 2019-06-14 15:46:18
    1、显示命令 语法:ls [选项] [路径] 功能:显示指定工作目录下的内容 主要参数举例: -a 显示所有文件以及目录。 -l 列出文件名称外,还将文件形态、权限、拥有者、文件大小等详细信息列出。 2、查看当前工作路径...
  • shell基本操作 !- 查看历史命令 !!执行上一条命令 !8 执行倒数第8条命令
  • Shell脚本中常用的命令(一)

    千次阅读 2020-02-13 22:05:10
    在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器) 它类似于DOS下的command.com和后来的cmd.exe,它接收用户命令,然后调用相应的应用程序 同时它又是一种程序设计...
  • shell脚本【命令解析过程】

    千次阅读 2018-06-16 10:24:55
    必须要知道命令解析过程的意义在于:能够清楚的知道命令解析步骤。若发生错误时,能够知道该怎样更改。 比如在博客:I/O重定向(点击打开链接)的举例:例①中,就有因为不知道命令行是如何读取的,而造成while语句...
  • LINUX SHELL命令练习题

    2013-09-01 10:50:19
    LINUX SHELL命令练习 题
  • 安卓常见shell命令

    千次阅读 2018-09-13 10:55:28
    adb shell pm list packages 列出目标设备中已安装的应用程序包 adb shell pm list packages -f 列出目标设备中已安装的应用程序包的具体位置 adb uninstall xxx 卸载或删除的应用包xxx adb pull /data/app/...
  • 最近在处理一个 `Python` 局部变量的作用域问题...所以知识这个东西还是要不断“温故”,今天要总结的 `Shell` 脚本命令也是,基本属于一看就会,一写不对的状态,所以还是要把常用的操作总结到一起,方便查找和复习...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 292,485
精华内容 116,994
关键字:

shell的一些基本命令