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

    2020-09-06 09:52:45
    Shell脚本(shell-script),是一种为shell编写的脚本程序。 shell编程跟javaScript、php编程一样,只要有一个能编写代码文本编辑器和一个能执行脚本的解释器就可以了。 shell脚本的执行 写一个shell脚本 #!/bin/bas

    shell介绍

    Shell 是一个用c语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
    shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核服务。

    shell脚本

    Shell脚本(shell-script),是一种为shell编写的脚本程序。
    shell编程跟javaScript、php编程一样,只要有一个能编写代码文本编辑器和一个能执行脚本的解释器就可以了。

    shell脚本的执行

    写一个shell脚本

    #!/bin/bash
    echo "Hello World !"
    

    执行的两种方式

    1.作为可执行程序进行执行

    #先给执行脚本赋权
    chmod +x ./demo1.sh
    # 执行脚本
    bash demo1.sh
    

    2.作为解释器参数

    /bin/sh demo1.sh
    /bin/php test.php
    

    shell 变量

    定义变量是,变量名不加美元符号($,PHP语言中变量需要)
    案例演示

    name="张三"
    

    注意

    • 明明只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可以help命令查看保留关键字)

    使用变量

    使用一个定义过的变量,只要在变量名前面加美元符号即可
    案例演示

    #!/bin/bash
    name="张三"
    echo ${name}
    # 如果不加大括号,在碰到很多单词在一起的时候可能会混淆,导致不输出变量。
    echo $name
    

    只读变量

    使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。(有点类似于常量)
    案例演示

    #!/bin/bash
    studentage=12
    readonly studentage
    echo ${studentage}
    studentage=15
    echo ${studentage}
    

    删除变量

    使用unset命令删除变量

    #!/bin/bash
    name="张三"
    echo ${name}
    unset name
    echo ${name}
    

    此结果只会打印一次张三
    变量被删除后不能再次使用。unset命令不能删除只读变量

    变量类型

    运行shell时,会同时存在三种变量:

    • 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    • 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要变量来保证其运行。必要的时候shell脚本也可以定义环境变量。
    • shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    shell字符串

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其他类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单引号的区别跟php类。

    单引号

    str='hello world'
    

    单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。
    • 单引号字符串中不能出现单独一个单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

    双引号

    #!/bin/bash
    name="张三"
    str="hello ${name} !"
    echo -e $str
    

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符

    拼接字符串

    #!/bin/bash
    name='张三'
    #使用双引号拼接
    str1="hello "$name" !"
    str2="hello $name !"
    str3="hello ${name} !"
    echo $str1 $str2 $str3
    
    #使用单引号拼接
    str4='hello '$name' !'
    str5='hello ${name} !'
    echo $str4
    echo $str5
    

    获取字符串长度

    #!/bin/bash
    str="张三"
    echo ${#str} #输出2
    

    提取子字符串

    从字符串中提取子字符串

    #!/bin/bash
    str="hello My name is zhangsan"
    echo ${str:0:5}
    

    查找子字符串

    查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)

    string="runoob is a great site"
    echo `expr index "$string" io`  # 输出 4
    

    注: 以上脚本中`是反引号,而不是单引号’,不要看错了。

    数组

    数组中可以存放多个值。Bash Shell只支持一位数组(不支持多为数组),初始化时不需要定义数字大小(与PHP类似)。
    与大部分编程语言类似,数组元素的下标由0开始。
    Shell数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

    names=("name1" "name2" "name3" ....)
    

    案例演示

    #!/bin/bash
    names=(A "name2" "name3")
    echo ${names[0]}
    

    获取数组中的数组元素

    使用@或*可以获取数组中的所有元素
    案例演示

    #!/bin/bash
    names=("name1" "name2" "name3" "name4" "name5")
    echo "${names[*]}"
    echo "${name[@]}" 
    

    获取数组的长度

    #!/bin/bash
    names=("name1" "name2" "name3" "name4" "name5")
    echo "${#names[*]}"
    echo "${#names[@]}"
    
    展开全文
  • shell脚本基本命令

    2018-03-20 20:48:50
    #退出shell脚本 exit #定义一个变量并为其赋值 #变量无需首先声明类型,"="号两边不能有空格 #对一个已有值的变量赋值,新值取代旧值 demo="hello world" #在使用该变量的时候需要加$号使用 ...
    1. #退出shell脚本
      exit
      #定义一个变量并为其赋值
      #变量无需首先声明类型,"="号两边不能有空格
      #对一个已有值的变量赋值,新值取代旧值
      demo="hello world"
      #在使用该变量的时候需要加$号使用
      echo $demo
      #shell脚本执行
      (1).先对shell脚本添加执行权限
      (2).通过./XXX.sh或者 sh XXX.sh执行脚本(XXX为脚本名)
      #bash和sh的区别
      sh是bash的子集,具体区别可以参考:
      http://www.cnblogs.com/hopeworld/archive/2011/03/29/1998488.html
      #数组操作
      一对括号表示是数组,数组元素使用“ ”符号分开
      a=(1 2 3 4 5)
      #获取数组长度,格式:${#数组名[@ OR *]}
      echo ${#a[@]}
      echo ${#a[*]}
      #输出指定下标的值,下标从0开始,格式:${数组名[下标]}
      echo ${a[2]}
      #输出整个数组的内容,格式:${数组名[@ OR *]}
      echo ${a[@]}
      echo ${a[*]}
      #清楚数组中的对应元素,格式:unset 数组名[下标]
      unset a[1]
      #清楚整个数组中的元素,格式:unset 数组名
      unset a
      #截取数组,格式:${数组名[@ OR *]:起始位置:长度}
      ${a[@]:0:3}
      ${a[*]:0:3}
      #替换数组中的指定内容,格式:${数组名[@ OR *]/查找字符串/替换字符串}
      ${a[*]/2/50}
      #将字符串拆分为数组,利用IFS进行分割
      #X代表使用的分割符,使用时先将初始状态保存,使用完毕后还原
      IFS=“ X”
      
      #if语句,格式
      #...........................................
      if ....
      then
          .....
      elif ...
      then
          ....
      else
          ....
      fi
      #注意条件测试部分中的空格。方括号两侧都有空格,在-f、-lt、=等符号两侧同样有空格
       [ -f "$file" ] : 判断$file是否是一个文件
       [ -x "$file" ] : 判断$file是否存在且有可执行权限, -r 测试文件可读性
       [ -n "$a" ] : 判断变量$a是否有值
       [ -z "$a" ] : 判断变量$a是否为空字符串
       [ $a -lt 3 ] : 判断$a的值是否小于3,-gt和-le分别表示大于或小于等于
       [ "$a" = "$b" ] : 判断$a和$b的取值是否相等
       [ cond1 -a cond2 ] : 判断cond1和cond2是否同时成立(相当于&&),-o表示有一成立(相当于||) 
      #...........................................
      eg.
      if [ $# -lt 3 ]
      then    
          echo $*;
      else
          echo $0;
          echo "参数过多不在控制台显示";
      fi  
      
      #while循环,格式
      while [ cond1 ] && { | } [ cond2 ] ...
      do
          ...
      done
      eg.
      i=10;
      while [[ $i -gt 5 ]]
      do    
          echo $i;
          ((i--));
      done
      
      #for循环,格式
      for var in ...
      do
          ...
      done
      for (( cond1; cond2; cond3 ))
      do
          ...
      done
      eg.
      for i in $(seq 10)
      do
          echo $i;
      done
      for((i=1;i<=10;i++))
      do
          echo $i;
      done
      
      #until循环,格式
      until [ cond1 ] && { || } [ cond2 ] …
       do
          …
      done
      eg.
      a=10;
      until [[ $a -lt 0 ]]
      do
          echo $a;
          ((a--));
      done
      
      #case语句,格式
      ;; <<====>>break作用
      case var in
          pattern 1 )
              … ;;
          pattern 2 )
              … ;;
          *)
              … ;;
      esac
      eg.
      case $1 in
          start | begin)
              echo "start something"
            ;;
          stop | end)
              echo "stop something"
            ;;
          *)
              echo "Ignorant"
            ;;
      esac
      
      #select交互语句,格式
      select var in …
      do
          ....
         break;
      done
      eg.
      select ch in "begin" "end" "exit"
      do
          case $ch in
              "begin")
                  echo "start something"
                ;;
              "end")
                  echo "stop something"
                ;;
              "exit")
                  echo "exit"
                    break;
              ;;
              *)
                  echo "Ignorant"
                ;;
          esac
      done
      ## 注意这里交互输入要输入1,2,3,而不是beign,end,exit
      
      #function语句,格式
      functionname()
      {
       …
      }
      # 函数名前面多了个function关键字
      function functionname()
      {
          …
      }
      eg.
      ###### 函数定义 ######
      echo "函数定义";
      # 注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
      function hello()
      {
          echo "Hello!";
      }
      function hello_param() 
      {
          echo "Hello $1 !";
      }
      ###### 函数调用 ######
      echo "函数调用";
      hello;
      ###### 参数传递 ######
      echo "函数传参调用";
      hello_param ben;
      ###### 函数文件 ######
      echo "函数文件调用";
      # 调用函数文件,点和demo_call之间有个空格
      . demo_call.sh;
      # 调用函数
      callFunction ben;
      ###### 载入和删除 ######
      echo "载入和删除";
      # 用unset functionname 取消载入
      # unset callFunction;
      # 因为已经取消载入,所以会出错
      # callFunction ben;
      ###### 参数读取 ######
      echo "参数读取";
      # 参数读取的方式和终端读取参数的方式一样
      funWithParam()
      {
          echo "The value of the first parameter is $1 !"
          echo "The value of the second parameter is $2 !"
          echo "The value of the tenth parameter is $10 !"
          echo "The value of the tenth parameter is ${10} !"
          echo "The value of the eleventh parameter is ${11} !"
          echo "The amount of the parameters is $# !"
          echo "The string of the parameters is $* !"
      }
      funWithParam 1 2 3 4 5 6 7 8 9 34 73
      ###### 函数return ######
      echo "函数return";
      funWithReturn()
      {
          echo "The function is to get the sum of two numbers..."
          echo -n "Input first number: "
          read aNum
          echo -n "Input another number: "
          read anotherNum
          echo "The two numbers are $aNum and $anotherNum !"
          return $(($aNum+$anotherNum))
      }funWithReturn
      # 函数返回值在调用该函数后通过 $? 来获得
      echo "The sum of two numbers is $? !"
      #函数文件demo_call.sh
      function callFunction()
      {
          echo "callFunction $1 !";
          return 1;
      }
      参考文章:
      http://blog.csdn.net/birdben/article/details/52157271
      
      
      
      
      


    展开全文
  • shell脚本基本命令You’ve learned how to create scripts, use arguments, and build for loops. Now, let’s take a look at some more basic commands, text file manipulation, and redirecting input and ...
    shell脚本基本命令

    shell脚本基本命令

    banner-01

    You’ve learned how to create scripts, use arguments, and build for loops. Now, let’s take a look at some more basic commands, text file manipulation, and redirecting input and output to files and other commands.

    您已经了解了如何创建脚本,使用参数以及构建for循环。 现在,让我们看一些更基本的命令,文本文件操作以及将输入和输出重定向到文件和其他命令。

    一些基本的有用命令 (Some Basic Useful Commands)

    We’ve already given you a basic breakdown of shell scripts and an example-based outline of for loops, but be sure to check out those articles if you’ve missed our shell scripting guide thus far.

    我们已经为您提供了Shell脚本基本分类for循环的基于示例的概述 ,但是如果您到目前为止尚未错过我们的Shell脚本指南,请务必查看这些文章。

    The command-line is wonderful for many reasons, and redirection is one of the most prominent. If you had to make note of and reproduce the output of every command in order to take further action or use that for something else, then we’d all have gone crazy long ago. Redirection lets us use that output and save it or immediately use it as an input for another command. We can also use files as inputs for other commands.

    命令行之所以出色,有很多原因,重定向是最突出的原因之一。 如果您必须记下并重现每个命令的输出以采取进一步的措施或将其用于其他用途,那么很久以前我们都会疯了。 重定向使我们可以使用该输出并保存它,或者立即将其用作另一个命令的输入。 我们还可以将文件用作其他命令的输入。

    Before we go on, let’s cover some basic commands which can be of use in many different places.

    在继续之前,让我们介绍一些可以在许多不同地方使用的基本命令。

    echo – This command simply prints (displays) the entirety of its argument on the command-line as output

    echo –此命令仅在命令行上打印(显示)整个参数作为输出

    echo argument with spaces

    带空格的echo参数

    echo 1

    As you can see, special characters need to be “escaped” so they are treated normally. This is done by using a backslash (\) in front of the character. It’s a better idea to use quotes. The echo command also works with variables.

    如您所见,特殊字符需要“转义”,以便正常处理。 这是通过在字符前面使用反斜杠(\)来完成的。 使用引号是一个更好的主意。 echo命令也可用于变量。

    echo 2

    As you can see, single and double quotes behave differently. For more information, check out What’s the Difference Between Single and Double Quotes in the Bash Shell?

    如您所见,单引号和双引号的行为不同。 有关更多信息,请查看Bash Shell中的单引号和双引号有什么区别?

    cat – This command displays the contents of text files as output.

    cat –此命令将文本文件的内容显示为输出。

    cat file_to_be_read

    猫file_to_be_read

    Let’s say we create this text file in nano:

    假设我们在nano中创建了此文本文件:

    nano list

    When we use the cat command on the file, we can see it’s output.

    在文件上使用cat命令时,我们可以看到它的输出。

    cat list

    grep – This is one of the most powerful and useful commands available to you in Linux. It stands for Global/Regular Expression Print. It looks through a file and prints any line that matches a particular pattern. Because this pattern is based on “regular expression,” a concise line can yield a multitude of patterns to be matched. For not, though, you can enter a tern for searching.

    grep –这是Linux中可用的最强大和有用的命令之一。 它代表全局/正则表达式打印。 它浏览文件并打印与特定模式匹配的任何行。 因为此模式基于“正则表达式”,所以简洁的行可以产生大量要匹配的模式。 但是,您可以输入一个“ tern”来进行搜索。

    grep pattern file

    grep模式文件

    grep

    I assure you, grep can do more, but for now let’s stick to the easier stuff.

    我向您保证,grep可以做更多的事情,但是现在让我们坚持使用更简单的方法。

    重定向输出 (Redirecting Outputs)

    To redirect the output of a command to a file, we make use of a special character, the greater-than symbol (>).

    要将命令的输出重定向到文件,我们使用特殊字符,即大于号(>)。

    Let’s change our list up, shall we? Enter the following command:

    让我们改变一下清单,好吗? 输入以下命令:

    echo pepperoni > list

    回声意大利辣味香肠>列表

    echo gt list

    You can see that echo doesn’t display the line anymore, and when we look at the contents of the “list” file, we see what we echoed in there.

    您可以看到echo不再显示该行,并且当我们查看“列表”文件的内容时,我们将看到在其中回显的内容。

    Also take note that the previous contents of “list” were removed. Try it again:

    另请注意,“列表”的先前内容已删除。 再试一遍:

    echo gt list 2

    This can be useful when you want to reuse a file, but often we just want to add to an existing file. For this, we use two consecutive greater-than symbols:

    当您想重用文件时,这很有用,但是通常我们只想添加到现有文件中。 为此,我们使用两个连续的大于号:

    echo yellow peppers >> list

    回声黄椒>>列表

    echo gtgt list

    Easy! Let’s use this command to create a larger list, shall we?

    简单! 让我们使用此命令创建一个更大的列表,对吧?

    echo gtgt list 2

    There we go. I think you can see why so many geeks use the command-line to make to-do lists and the like, but it gets even better.

    好了 我想您可以理解为什么这么多怪胎使用命令行制作待办事项列表之类的方法,但是情况变得更好。

    Let’s take the output of a command and put it into a file:

    让我们获取命令的输出并将其放入文件中:

    ls –al / > ~/rootlist

    ls –al />〜/ rootlist

    rootlist

    Making lists of files, editing them down, and then running commands on the ones you want has never been simpler. And, while we’re doing these basic functions in the command-line, these work well in scripts, too.

    创建文件列表,进行编辑,然后在所需文件上运行命令从未如此简单。 而且,尽管我们在命令行中执行了这些基本功能,但它们在脚本中也能很好地工作。

    管道或链接 (Piping, or Chaining)

    Piping is so named because it uses the pipe, (| ; shared with the \ key on most keyboards). Essentially, it takes the output of one command and directly feeds it to another. You can create long chains of commands to get a very specific desired output this way, and it’s very convenient for commands like grep.

    如此命名管道是因为它使用管道(|;在大多数键盘上与\键共享)。 本质上,它接受一个命令的输出,然后直接将其馈送到另一个命令。 您可以通过这种方式创建较长的命令链,以获得非常特定的所需输出,这对于诸如grep这样的命令非常方便。

    pipe grep

    It acts a lot like “>” except it can be chained multiple times and its effect is more general in that it doesn’t need to go through a text file.

    它的作用与“>”非常相似,不同之处在于它可以被多次链接,并且其效果更为普遍,因为它不需要浏览文本文件。

    As you can see, grep is case-sensitive. You can use the “-i” flag to make it ignore case.

    如您所见,grep区分大小写。 您可以使用“ -i”标志使其忽略大小写。

    grep non-case-sensitive

    重定向输入 (Redirecting Inputs)

    You can also take inputs from files for commands by using the less-than symbol (<).

    您还可以使用小于号(<)从文件中获取命令输入。

    cat < list

    猫<清单

    cat lt list

    “That’s not any different from using an argument!” you might say. Well, you’d be correct in this case. Where redirection of input really comes in handy is in chaining commands together.

    “这与使用参数没有什么不同!” 你可能会说。 好吧,在这种情况下你是正确的。 输入重定向的真正方便之处在于将命令链接在一起。

    Let’s say we want to filter any word that has “pep” in it from our current “list” file into a new file called “revisions”.

    假设我们要从当前“列表”文件中过滤出任何包含“ pep”的单词,并将其过滤到一个名为“修订”的新文件中。

    grep pep < list > revisions

    grep pep <列表>修订

    input-output 1

    Let’s redo this command, and add some sorting.

    让我们重做此命令,并添加一些排序。

    grep pep < list | sort > revisions

    grep pep <列表| 排序>修订

    input-output 2

    This will use “pep” as the search term from the input file “list”, sort it in alphabetical order (all upper-case terms followed by all lower-case terms), then output it into the “revisions” file.

    这将使用“ pep”作为输入文件“列表”中的搜索词,并按字母顺序排序(所有大写词,然后是所有小写词),然后将其输出到“修订”文件中。

    To illustrate the sort command, let’s look at the following example:

    为了说明sort命令,让我们看下面的示例:

    sort -f

    As you can see, adding the “-f” flag to the sort command allows you to ignore case. This makes it easy for us to alphabetize lines in text files and ignore capitalization when it doesn’t matter.

    如您所见,将“ -f”标志添加到sort命令可以忽略大小写。 这使我们可以轻松地按字母顺序排列文本文件中的行,并在无关紧要时忽略大写。

    一个简单的脚本 (A Simple Script)

    Let’s create a script that has the following form:

    让我们创建一个具有以下形式的脚本:

    script searchterm listfile

    脚本搜索词列表文件

    script1

    It will take the term and use grep to search through a list file, sort the results, and then output them to another file.

    将使用术语并使用grep搜索列表文件,对结果进行排序,然后将其输出到另一个文件。

    Here’s the directory that we’ll be testing the script in:

    这是我们将在其中测试脚本的目录:

    script3

    And, we can create a list of what in here, then run the script.

    并且,我们可以在此处创建列表,然后运行脚本。

    script2

    There you go! The more you learn the rules of regular expressions, the more accurately you can put together a search command. And, anything that is valid in quotes can be substituted for your first argument!

    你去! 您对正则表达式的规则了解得越多,则可以更准确地组合搜索命令。 而且,任何用引号引起来的内容都可以替代您的第一个参数!

    As far as sorting goes, you can do more than just sort alphabetically. Take a look at the man page for some of the following commands:

    就排序而言,您不仅可以按字母顺序进行排序,还可以做更多的事情。 查看手册页,了解以下一些命令:

    • tsort – a more advanced topological sorting function

      tsort –更高级的拓扑排序功能
    • tr – lets you map specific characters to other characters, and transcribe between them.

      tr –使您可以将特定字符映射到其他字符,并在它们之间转录。
    • uniq – removes any non-unique (read: duplicate)

      uniq –删除所有非唯一(读取:重复)
    • awk – a really advanced text processing language/function that can be used to separate fields in filenames

      awk –一种非常高级的文本处理语言/功能,可用于分隔文件名中的字段
    • cut, paste/join – commands useful for isolating fields from text files and adding new data into columns

      剪切,粘贴/联接–用于从文本文件中隔离字段并将新数据添加到列中的命令
    • look – searches like grep does, but uses a dictionary file (that can be user-specified) for the lookup

      look –像grep一样进行搜索,但是使用字典文件(可以由用户指定)进行查找
    • wc – lets you get word count, line count, character count, and more

      wc –让您获得字数,行数,字符数等


    We took a look at some more basics today that can be as useful on the command-line as in scripts. Text-based data is often at the heart of things we use daily, so being able to work with it, search it, and manipulate it is key.

    今天,我们看了一些其他基础知识,这些基础知识在命令行和脚本中一样有用。 基于文本的数据通常是我们日常使用的核心内容,因此能够使用它,进行搜索和操作是关键。

    What are some of your favorite scripts? Have any special-use scripts for text-based files? Share what you know in the comments!

    您最喜欢什么脚本? 是否有用于基于文本的文件的特殊用途脚本? 在评论中分享您所知道的!

    翻译自: https://www.howtogeek.com/69091/the-beginners-guide-to-shell-scripting-3-more-basic-commands-chains/

    shell脚本基本命令

    展开全文
  • 命令提示符在BASH中,美元符号“$”作为命令提示符,当使用root权限时,命令提示符变为井号“#”。在BASH的美元提示符前,一般还会有一段文字,由用户名、主机名和当前目录组成。完整的提示符示例如下trump@...

    e6915eab7ef4db5b97460d787eb2580a.png

    命令提示符

    在BASH中,美元符号“$”作为命令提示符,当使用root权限时,命令提示符变为井号“#”。在BASH的美元提示符前,一般还会有一段文字,由用户名、主机名和当前目录组成。完整的提示符示例如下

    trump@fuckamerica:/home$

    命令自动补齐

    有些命令或参数很长,每次输入都很麻烦,BASH提供了命令或参数自动补齐的功能。

    在输入了命令或参数的前几个字母后按TAB键可以自动补齐命令或参数,当匹配到的命令或参数有多个时,连按两次TAB可以显示所有的选择。例如,在当前目录下有下列文件:

    a.txt b.txt c.txt abc.txt bbc.txt

    当输入

    $ cat b

    然后按一次TAB键,可以将命令自动补齐为

    $ cat b.txt

    该命令显示b.txt的文件内容。

    若输入

    $ cat a

    按TAB键则不会自动补齐,连按两次TAB则会显示可以选择的项目

    a.txt abc.txt

    通配符

    Shell使用“ * ”,“?”,“[]”作为通配符用于匹配文件名,“ * ”用于匹配文件名中任意长度的字符串,“?”用于匹配文件名中单个字符串,“[]”用于匹配方括号中出现在字符串。若目录中文件不变,则下列命令

    $ ls *.txt

    $ ls [a-c].txt

    $ ls [abc].txt

    $ ls ?bc.txt

    的执行结果分别如下

    a.txt b.txt c.txt abc.txt bbc.txt

    a.txt b.txt c.txt

    a.txt b.txt c.txt

    abc.txt bbc.txt

    其中[a-c]与[abc]相同。

    查看文件与目录

    pwd

    显示当前目录,即工作目录

    $ cd /home/

    $ pwd

    结果如下

    /home

    cd

    更改目录 (change directory)

    $ cd /

    $ cd

    $ cd ~

    $ cd ..

    $ cd ../../..

    分别进入根目录,进入主(home)目录,进入主目录,进入上级目录,进入上三级目录。其中’..’代表上一级目录,类似的’.’代表本目录。

    ls

    列出文件和目录(list),命令格式如下

    ls [OPTION]... [FILE]...

    常用选项有

    • -a:列出所有文件,包括隐藏文件(以“.”开头的文件)
    • -l:查看文件的各种属性

    默认情况下,目录显示为蓝色;普通文件显示为黑色;可执行文件显示为草绿色;淡蓝色则表示这个文件是一个链接文件(相当于 Windows下的快捷方式)。也可以使用带F选项,该选项会在每个目录后加上/,在可执行文件后加*,在链接文件后加上@,在无法显示颜色的终端比较有用。选项可组合使用,多个选项只需一根横线,如-al。另外ls+路径查看该子目录的文件。

    dir命令与ls命令类似,只是功能更少;vdir相当于ls –l。

    cat & more

    这两条命令都可查看文本文件。使用时直接加文件名即可,可以跟多个文件名,如

    $ cat a.txt b.txt

    $ more abc.txt

    cat将所有内容显示在桌面上,cat命令使用-n选项可以显示行号。

    more命令只显示文件的一部分,可用于查看非常长的文件,其余与cat一样。more命令会在最后显示一个百分比,表示已显示内容占整个文件的比例。按下空格键向下翻动一页,按 Enter键向下滚动一行,按q(quit)键退出。

    head & tail

    分别显示文档开头和结尾,直接加文件名即可,可使用-n参数显示行号,默认输出文件名,置于==>和<==之间

    less

    与more类似,也用于查看文件,但功能更强大,可实现光标键前后左右滚屏、用行号/百分号作为书签浏览文件、实现检索/高亮等、兼容字处理软件(如vim)的键盘操作、信息提示易控制且丰富等。

    less命令执行后,会在屏幕底部显示一个冒号“:”,等待输入命令。如果想向下翻一页,可以按下空格键。如果想向上翻一页,按下B键。也可以用光标键向前、后、甚至左右移动。

    less可以查找字符,输入/+想要查找的内容可查找,再次按/可查找上次查找的内容,按q可退出返回shell。

    grep

    命令格式为:grep [OPTIONS] PATTERN [FILE...]。该命令可在不列出文件内容的情况下查找文件内容。如

    $ grep abcdef a.txt b.txt

    表示在文件a.txt和b.txt中查找abcdef,若查找的内容包含空格要用单引号括起来。严格说该命令可查找所有正则表达式,类似还有egrep,比grep更加强大。

    find

    查找文件位置,可以基于各种各样的属性搜索一个给定目录(以及它的子目录)。

    • -name选项,指定文件名
    • -type选项,指定要寻找的文件类型,文件类型见下表
    • -size选项,指定要搜索的文件的大小,如“+1M”表示寻找大于1 M的文件。若字符串以减号开头,则表示查找小于指定数的文件。若没有符号意味着“精确匹配这个数”。
    • -atime选项,用来查找最后一次使用在n天前的文件,也可以使用+n或-n来指定天数
    • -mtime选项,用来查找最后一次修改在n天前的文件,也可以使用+n或-n来指定天数
    • -print 把匹配文件的全路径名输送到标准输出。如果没有指定其它操作,这是默认操作

    9d1bf5e9836c6961e9779ecd61e96b13.png

    (知乎不支持表格吗???)

    locata

    该命令可通过给定的文件名快速定位文件,该命令的原理是快速的路径名数据库搜索,速度很快,如

    $ locate *.doc

    可定位所有的word文档。使用updatedb命令可以更新路径名数据库。

    whereis

    查找程序文件,返回二进制可执行文件、源代码文件和使用手册位置,使用-b选项可只查找二进制文件,它检索的子目录固定(提高检索速度),如

    $ s whereis find

    可查找find命令的位置,可以使用-b选项让whereis只查找二进制文件

    $ whereis-b find

    man & whatis & apropos

    man+命令名可以查看帮助信息,实际调用less命令,按kj分别上下翻动,空格下翻一页,q退出手册。

    $ man ls

    可以查看ls命令的手册

    man命令显示的帮助文档通常很长,whatis命令是man的精简版,可以显示命令简介

    apropos命令通过查找命令简介反查某命令,即搜索whatis的输出返回其输入,比如用户想知道如何删除文件,就可以运行如下命令查看那个命令与删除有关

    $ apropos delete

    展开全文
  • shell脚本基本命令1

    2019-05-08 11:19:00
    使用Shell脚本能够轻易处理文件和目录之类的对象,相对于其他编程语言,Shell脚本执行起来更快,而且他也是个UNIX系统之间通用的功能,下面就让我们看一下Shell脚本的一些简单的命令。 以下如果是命令用$表示,在...
  • Shell脚本基本命令2

    2019-05-08 15:25:00
    用途:产生Shell脚本的输出 echo的转义序列: \a 警示字符,通常是ASII的BEL字符 \b 退格 \c 输出中忽略最后的换行字符,这个参数之后的任何字符,包括接下来的参数,都会被忽略掉 \f 清楚屏幕 \n 换行 \r ...
  • Shell脚本基本命令3

    2019-05-08 16:07:00
    1.简单的执行跟踪 $ sh -x nusers 打开执行跟踪功能 + who 被跟踪的命令 ... tracel.sh 建立脚本 #! /bin/sh set -x 打开跟踪功能 echo lst echo 做事 set +x关闭跟踪功能 echo 2nd echo 再...
  • Shell脚本基本命令5

    2019-05-09 15:38:00
    1.sort的稳定性 例以前面两个字段为键值,排序这四行 $ sort -t_ -k1,1 -k2,2 <<EOF one_two one_two_three one_two_four ...sort latin_numbers | uniq 显示唯一的排序后的记录,重复则...
  • Shell脚本基本命令4

    2019-05-09 14:36:00
    使用join连接字段 1.$ cat >sales 创建salse文件 #业务员数据 注释说明 #业务员量 joe 100 jane 200 herman 150 chris 300 2.$ cat > quotas 创建quotas文件 #配额 ...3.创建merge-s...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,480
精华内容 1,392
关键字:

shell脚本基本命令