精华内容
下载资源
问答
  • 2、java设置Linux系统时间之 setDate.sh

    千次阅读 2009-06-12 13:15:00
    1、脚本编写Linux shell脚本...编写时间设置脚本:setDate.sh,setDate.sh需要两个参数。详细如下:setDate.sh:需要2个参数:日期、时间 if [ $# == 2 ]thenecho "input date is:" $1 ",time is:" $2date -s "$1 $2"f

    1、脚本编写

    Linux shell脚本如何编写,网络上有很详细的叙述,这里就不赘述了。

    编写时间设置脚本:setDate.shsetDate.sh需要两个参数。详细如下:

    setDate.sh:需要2个参数:日期、时间

     

    if [ $# == 2 ]

    then

    echo "input date is:" $1 ",time is:" $2

    date -s "$1 $2"

    fi

     

    2、权限修改:

    设置setDate.sh为可执行文件:chmod u+x setDate.sh,使setDate.sh能够以shell脚本的方式运行。 setDate.sh 修改Linux底层参数,普通用户账户下,是无法成功设置Linux系统的时间。解决办法如下:

    3sudo设置

    sudo:Super user do.

    Linux不允许普通用户修改系统内核配置。绕过这种限制有2种办法:

           1、使用root用户组

           2、使用sudo命令

    方法1有太多限制,不予考虑。使用方法2具体过程如下。

     

    切换到root账户,使用visudo编辑sudoers配置文件(网上有sudo具体使用方法):

    如下: 普通用户:test/test。用hostname获取当前主机名:linux.localdomain

    root    ALL=(ALL) ALL

    test linux.localdomain=(ALL) NOPASSWD: /home/test/demo/setDate.sh

    #第一行:允许root用户使用sudo命令变成系统中任何其它类型的用户

    #第二行:

    格式:用户或组 主机【ALL/本机名】 = (权限【ALL/root】) 命令,就本例来说,它是用户test。此外,因为系统中的组和用户可以重名,要想指定该规则的适用对象是组而非用户的话,组对象的名称一定要用百分号%开头。

     

    切换到test用户中:su - etoken,运行sudo ./setDate.sh 2009-6-2 18:01:22,使用date命令检查Linux时间是否成功修改。如果成功,就说明配置成功了。那么java LinuxTimeSetter,也会成功了。

    展开全文
  • linuxsh脚本编程

    千次阅读 2016-05-04 22:36:21
    Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,...

      在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 

      下面,让我们一起来看看shell是如何工作的: 

      建立一个脚本 

      Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在bash的大姐,bourne shell 中运行)。 

      如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序。程序必须以下面的行开始(必须方在文件的第一行): 

     

    Sh代码

    1.  #!/bin/sh   



      符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 

      当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 

      要使脚本可执行: 

      

    Sh代码

    1. chmod +x filename   



      然后,您可以通过输入: ./filename 来执行您的脚本。 

      注释 

      在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 

      变量 

      在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: 

      变量名=值 

      取出变量值可以加一个美元符号($)在变量前面: 

      

    Sh代码

    1. #!/bin/sh    
    2.   
    3. #对变量赋值:   
    4. a="hello world"    
    5. # 现在打印变量a的内容:   
    6. echo "A is:"    
    7. echo $a   



      在您的编辑器中输入以上内容,然后将其保存为一个文件first。之后执行chmod +x first 使其可执行,最后输入./first执行该脚本。 

      这个脚本将会输出: 
      A is: 
      hello world 

      有时候变量名很容易与其他文字混淆,比如: 

      

    Sh代码

    1. num=2    
    2. echo "this is the $numnd"   



      这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: 

      

    Sh代码

    1. num=2    
    2. echo "this is the ${num}nd"   



      这将打印: this is the 2nd 

      有许多变量是系统自动设定的,这将在后面使用这些变量时进行讨论。 

      如果您需要处理数学表达式,那么您需要使用诸如expr等程序(见下面)。 

      除了一般的仅在程序内有效的shell变量以外,还有环境变量。由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 

      Shell命令和流程控制 

      在shell脚本中可以使用三类命令: 

      Unix 命令: 

      虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 

      常用命令语法及功能 

      echo "some text": 将文字内容打印在屏幕上 
      ls: 文件列表 
      wc -l filewc -w filewc -c file&: 计算文件行数计算文件中的单词数计算文件中的字符数 
      cp sourcefile destfile: 文件拷贝 
      mv oldname newname : 重命名文件或移动文件 
      rm file: 删除文件 
      grep pattern file: 在文件内搜索字符串比如:grep searchstring file.txt 
      cut -b colnum file&: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt。千万不要和cat命令混淆,这是两个完全不同的命令 
      cat file.txt: 输出文件内容到标准输出设备(屏幕)上 
      file somefile: 得到文件类型 
      read var: 提示用户输入,并将输入赋值给变量 
      sort file.txt: 对file.txt文件中的行进行排序 
      uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq 
      expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 
      find: 搜索文件比如:根据文件名搜索find . -name filename -print 
      tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile 
      basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux 
      dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin 
      head file: 打印文本文件开头几行 
      tail file : 打印文本文件末尾几行 
      sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus : cat text.file | sed s/linuxfocus/LinuxFocus/ > newtext.file 
      awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F,{print $1 "," $3 }这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor,34, IndiaKerry Miller, 22,  
    USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA 

          详细了解awk 

       概念: 管道, 重定向和 backtick 

      这些不是系统命令,但是他们真的很重要。 

      管道 (|) 将一个命令的输出作为另外一个命令的输入。 

      grep "hello" file.txt | wc -l 
      在file.txt中搜索包含有"hello"的行并计算其行数。 
      在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。 

      重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。 

      > 写入文件并覆盖旧文件 
      >> 加到文件的尾部,保留旧文件内容。 

      反短斜线 
      使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。 

      命令: 

      find . -mtime -1 -type f -print 

      用来查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本: 

      

    Sh代码

    1. #!/bin/sh    
    2. # The ticks are backticks (`) not normal quotes ():    
    3. tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`   




      流程控制 

      "if" 表达式如果条件为真则执行then后面的部分: 

      if ....; then 
      .... 
      elif ....; then 
      .... 
      else 
      .... 
      fi 

    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等... 

      通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 

      [ -f "somefile" ] :判断是否是一个文件 
      [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 
      [ -n "$var" ] :判断$var变量是否有值 
      [ "$a" = "$b" ] :判断$a和$b是否相等 

      执行man test可以查看所有测试表达式可以比较和判断的类型。 

      直接执行以下脚本: 

      

    Sh代码

    1. #!/bin/sh    
    2.   if [ "$SHELL" = "/bin/bash" ]; then    
    3.   echo "your login shell is the bash (bourne again shell)"    
    4.   else    
    5.   echo "your login shell is not bash but $SHELL"    
    6.   fi   



      变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。 

      快捷操作符 

      熟悉C语言的朋友可能会很喜欢下面的表达式: 

      [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors" 

      这里 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。您也可以认为是逻辑运算中的与操作。上例中表示如果  
    /etc/shadow文件存在则打印" This computer uses shadow passwors"。同样或操作(||)在shell编程中也是可用的。这里有个例子: 

     

    Sh代码

    1.     
    2. #!/bin/sh    
    3. mailfolder=/var/spool/mail/james    
    4. [ -r "$mailfolder" ] { echo "Can not read $mailfolder"exit 1; }    
    5. echo "$mailfolder has mail from:"    
    6. grep "^From " $mailfolder   



      该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的"From" 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这 
    里有个问题,那就是我们必须有两个命令: 

      -打印错误信息 
    -退出程序 

      我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。 
      不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。 

      case表达式可以用来匹配一个给定的字符串,而不是数字。 

    case ... in 
    ...) do something here 
    esac 

      让我们看一个例子。 file命令可以辨别出一个给定文件的文件类型,比如: 

      file lf.gz 

      这将返回: 
      lf.gz: gzip compressed data, deflated, original filename, 
      last modified: Mon Aug 27 23:09:18 2001, os: Unix 

      我们利用这一点写了一个叫做smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:

    Sh代码

    1. #!/bin/sh   
    2. ftype=`file "$1"`    
    3. case "$ftype" in    
    4.   "$1: Zip archive"*)    
    5. unzip "$1"  
    6.   "$1: gzip compressed"*)    
    7. gunzip "$1"  
    8.   "$1: bzip2 compressed"*)    
    9. bunzip2 "$1"*) error "File $1 can not be uncompressed with smartzip";;    
    10.   esac   



      您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。也就是说,当我们运行: 

      smartzip articles.zip 

      $1 就是字符串 articles.zip 

      select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。 

      select var in ...do 
      break 
    done 
    .... now $var can be used .... 

      下面是一个例子: 

      

    Sh代码

    1. #!/bin/sh    
    2. echo "What is your favourite OS?"    
    3. select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do    
    4. break    
    5. done    
    6. echo "You have selected $var"   



      下面是该脚本运行的结果: 
      What is your favourite OS? 
      1) Linux 
      2) Gnu Hurd 
      3) Free BSD 
    4) Other 

      #? 1 
      You have selected Linux 

      您也可以在shell中使用如下的loop表达式: 

      while ...; do 
      .... 
      done 

      while -loop 将运行直到表达式测试为真。 will run while the expression that we test for is true. 关键字"break" 用来跳出循环 
    。而关键字"continue"用来不执行余下的部分而直接跳到下一个循环。 

      for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量: 

      for var in ....; do 
      .... 
      done 

      在下面的例子中,将分别打印ABC到屏幕上: 

      

    Sh代码

    1. #!/bin/sh    
    2. for var in A B Cdo    
    3. echo "var is $var"    
    4. done   



      下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:

    Sh代码

    1.      
    2.     #!/bin/sh    
    3.   # list a content summary of a number of RPM packages    
    4.   # USAGE: showrpm rpmfile1 rpmfile2 ...    
    5.   # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm    
    6.   for rpmpackage in $*; do    
    7.   if [ -r "$rpmpackage" ];then    
    8.   echo "=============== $rpmpackage =============="    
    9.   rpm -qi -p $rpmpackage    
    10.   else    
    11.   echo "ERROR: cannot read file $rpmpackage"    
    12.   fi    
    13.   done   



      这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。如果您运行 showrpm openssh.rpm w3m.rpm webgrep.rpm 
      此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm. 

    引号 

      在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序作这种替换,您可以使用引号:让我们来看一个例子,假设在当前目录下有一些文件,两个jpg文件, mail.jpg 和tux.jpg。

    Sh代码

    1.      
    2. #!/bin/sh    
    3. echo *.jpg   


      这将打印出"mail.jpg tux.jpg"的结果。 

      引号 (单引号和双引号) 将防止这种通配符扩展: 

     

    Sh代码

    1.     
    2.     #!/bin/sh    
    3.   echo "*.jpg"    
    4.   echo *.jpg   



      这将打印"*.jpg" 两次。 

      单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。 

      

    Sh代码

    1.     #!/bin/sh    
    2.   echo $SHELL    
    3.   echo "$SHELL"    
    4.   echo $SHELL   



    运行结果为: 
      /bin/bash 
      /bin/bash 
      $SHELL 

      最后,还有一种防止这种扩展的方法,那就是使用转义字符——反斜杆: 

      echo *.jpg 

      echo $SHELL 

      这将输出: 

      *.jpg 
      $SHELL 

      Here document. 

      当要将几行文字传递给一个命令时,here document.(译者注:目前还没有见到过对该词适合的翻译)一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果我们四有那个here document.就不必用echo函数一行行输出。一个 "Here document.quot; 以 << 开头,后面接上一个字符串,这个字符串还必须出现在here document.末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here document.打印帮助: 

      

    Sh代码

    1.     #!/bin/sh    
    2.   # we have less than 3 arguments. Print the help text:    
    3.   if [ $# -lt 3 ]then    
    4.   cat <<HELP    
    5.   ren -- renames a number of files using sed regular expressions    
    6.   USAGE: ren regexp replacement files...    
    7.   EXAMPLE: rename all *.HTM files in *.html:    
    8.   ren HTM$ html *.HTM    
    9.   HELP    
    10.   exit 0    
    11.   fi    
    12.   OLD="$1"    
    13.   NEW="$2"    
    14.   # The shift command removes one argument from the list of    
    15.   # command line arguments.    
    16.   shift    
    17.   shift    
    18.   # $* contains now all the files:    
    19.   for file in $*; do    
    20.   if [ -f "$file" ]then    
    21.   newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`    
    22.   if [ -f "$newfile" ]; then    
    23.   echo "ERROR: $newfile exists already"    
    24.   else    
    25.   echo "renaming $file to $newfile ..."    
    26.   mv "$file" "$newfile"    
    27.   fi    
    28.   fi    
    29.   done  



      这是一个复杂一些的例子。让我们详细讨论一下。第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数)  
    。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。如果输入参数等于或大于3个,我们就将第一个参数赋值给变量OLD,第二个参数赋值给变量NEW。下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。接着我们判断该文件是否存在,如果存在则通过sed命令搜索和替换来产生新的文件名。然后将反短斜线内命令结果赋值给newfile。这样我们就达到了我们的目的:得到了旧文件名和新文件名。然后使用mv命令进行重命名。 

      函数 

      如果您写了一些稍微复杂一些的程序,您就会发现在程序中可能在几个地方使用了相同的代码,并且您也会发现,如果我们使用了函数,会方便很多。一个函数是这个样子的: 

      functionname(){ 
        # inside the body $1 is the first argument given to the function 
        # $2 the second ... 
        body 
      } 

      您需要在每个程序的开始对函数进行声明。 

      下面是一个叫做xtitlebar的脚本,使用这个脚本您可以改变终端窗口的名称。这里使用了一个叫做help的函数。正如您可以看到的那样,这个定义的函数被使用了两次。 

      

    Sh代码

    1.     #!/bin/sh    
    2.   # vim: set sw=4 ts=4 et:    
    3.   help() {    
    4.     cat <<HELP    
    5.     xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole    
    6.     USAGE: xtitlebar [-h] "string_for_titelbar"    
    7.     OPTIONS: -h help text    
    8.     EXAMPLE: xtitlebar "cvs"    
    9.     HELP    
    10.     exit 0    
    11.   }    
    12.   # in case of error or if -h is given we call the function help:    
    13.   [ -z "$1" ] && help    
    14.   [ "$1" = "-h" ] && help    
    15.   # send the escape sequence to change the xterm titelbar:    
    16.   echo -e "33]0;$107"    
    17.   #   



      在脚本中提供帮助是一种很好的编程习惯,这样方便其他用户(和您)使用和理解脚本。 

      命令行参数 

      我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。但是在编写更复杂的程序时,您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值 (比如文件名)。 

      有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无遗是一个不错的方法。 

      

    Sh代码

    1. #!/bin/sh    
    2.   help() {   
    3.     cat <<HELP   
    4.     This is a generic command line parser demo.    
    5.     USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2   
    6.     HELP    
    7.     exit 0    
    8.   }    
    9.   while [ -n "$1" ]; do    
    10.   case $1 in   
    11.   -h) help;shift 1;; # function help is called    
    12.   -f) opt_f=1;shift 1;; # variable opt_f is set    
    13.   -l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2    
    14.   --) shift;break;; # end of options    
    15. -*) echo "error: no such option $1. -h for help";exit 1;;    
    16. *) break;;    
    17.   esac    
    18.   done    
    19.   echo "opt_f is $opt_f"    
    20.   echo "opt_l is $opt_l"    
    21.   echo "first arg is $1"    
    22.   echo "2nd arg is $2"   



    您可以这样运行该脚本: 

      cmdparser -l hello -f -- -somefile1 somefile2 

      返回的结果是: 

      opt_f is 1 
      opt_l is hello 
      first arg is -somefile1 
      2nd arg is somefile2 

      这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。 

    实例 

      一般编程步骤 

      现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令: 

      cp framework.sh myscript 

      然后再插入自己的函数。 

      让我们再看两个例子: 

      二进制到十进制的转换 

      脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:

    Sh代码

    1. #!/bin/sh    
    2. # vim: set sw=4 ts=4 et:    
    3. help() {    
    4.     cat <<HELP    
    5.     b2h -- convert binary to decimal    
    6.     USAGE: b2h [-h] binarynum    
    7.     OPTIONS: -h help text    
    8.     EXAMPLE: b2h 111010    
    9.     will return 58    
    10.     HELP    
    11.     exit 0    
    12.   }    
    13.   error() {    
    14.     # print an error and exit    
    15.     echo "$1"    
    16.     exit 1    
    17.   }    
    18.   lastchar() {    
    19.     # return the last character of a string in $rval    
    20.     if [ -z "$1" ]; then    
    21.     # empty string    
    22.     rval=""    
    23.     return    
    24.     fi    
    25.     # wc puts some space behind the output this is why we need sed:    
    26.     numofchar=`echo -n "$1" | wc -c | sed s/ //g `    
    27.     # now cut out the last char    
    28.     rval=`echo -n "$1" | cut -b $numofchar`    
    29.   }    
    30.   chop() {   
    31.     # remove the last character in string and return it in $rval    
    32.     if [ -z "$1" ]; then    
    33.     # empty string    
    34.     rval=""    
    35.     return    
    36.     fi    
    37.     # wc puts some space behind the output this is why we need sed:    
    38.     numofchar=`echo -n "$1" | wc -c | sed s/ //g `    
    39.     if [ "$numofchar" = "1" ]; then    
    40.     # only one char in string    
    41.     rval=""    
    42.     return    
    43.     fi    
    44.     numofcharminus1=`expr $numofchar "-" 1`    
    45.     # now cut all but the last char:    
    46.     rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`    
    47.   }    
    48.   while [ -n "$1" ]; do    
    49.   case $1 in   
    50.   -h) help;shift 1;; # function help is called    
    51.   --) shift;break;; # end of options    
    52.   -*) error "error: no such option $1. -h for help";;    
    53.   *) break;;    
    54.   esac    
    55.   done    
    56.   # The main program    
    57.   sum=0    
    58.   weight=1    
    59.   # one arg must be given:    
    60.   [ -z "$1" ] && help    
    61.   binnum="$1"    
    62.   binnumorig="$1"    
    63.   while [ -n "$binnum" ]; do    
    64.   lastchar "$binnum"    
    65.   if [ "$rval" = "1" ]; then    
    66.   sum=`expr "$weight" "+" "$sum"`    
    67.   fi    
    68.   # remove the last position in $binnum    
    69.   chop "$binnum"    
    70.   binnum="$rval"    
    71.   weight=`expr "$weight" "*" 2`    
    72.   done   
    73.   echo "binary $binnumorig is decimal $sum"    
    74.   #   



      该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制"10"可以这样转换成十进制: 

      0 * 1 + 1 * 2 = 2 

      为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc -c计算字符个数,然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。 

      文件循环程序 

      或许您是想将所有发出的邮件保存到一个文件中的人们中的一员,但是在过了几个月以后,这个文件可能会变得很大以至于使对该文件的访问速度变慢。下面的脚本rotatefile 可以解决这个问题。这个脚本可以重命名邮件保存文件(假设为outmail)为outmail.1,而对于outmail.1就变成了outmail.2 等等等等... 

     

    Sh代码

    1.  #!/bin/sh    
    2.   # vim: set sw=4 ts=4 et:    
    3.   ver="0.1"    
    4.   help() {    
    5.     cat <<HELP    
    6.     rotatefile -- rotate the file name    
    7.     USAGE: rotatefile [-h] filename    
    8.     OPTIONS: -h help text    
    9.     EXAMPLE: rotatefile out    
    10.     This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1    
    11.     and create an empty out-file    
    12.     The max number is 10    
    13.     version $ver    
    14.     HELP    
    15.     exit 0    
    16.   }    
    17.   error() {   
    18.     echo "$1"    
    19.     exit 1    
    20.   }    
    21.   while [ -n "$1" ]; do    
    22.   case $1 in   
    23.   -h) help;shift 1;;    
    24.   --) break;;    
    25.   -*) echo "error: no such option $1. -h for help";exit 1;;    
    26.   *) break;;    
    27.   esac    
    28.   done    
    29.   # input check:    
    30.   if [ -z "$1" ]then    
    31.   error "ERROR: you must specify a file, use -h for help"    
    32.   fi    
    33.   filen="$1"    
    34.   # rename any .1 , .2 etc file&:    
    35.   for n in 9 8 7 6 5 4 3 2 1; do    
    36.   if [ -f "$filen.$n" ]; then    
    37.   p=`expr $n + 1`    
    38.   echo "mv $filen.$n $filen.$p"    
    39.   mv $filen.$n $filen.$p    
    40.   fi    
    41.   done    
    42.   # rename the original file&:    
    43.   if [ -f "$filen" ]; then    
    44.   echo "mv $filen $filen.1"    
    45.   mv $filen $filen.1    
    46.   fi    
    47.   echo touch $filen    
    48.   touch $filen   



      这个脚本是如何工作的呢?在检测用户提供了一个文件名以后,我们进行一个9到1的循环。文件9被命名为10,文件8重命名为9等等。循环完成之后,我们将原始文件命名为文件1同时建立一个与原始文件同名的空文件。 

      调试 

      最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。 

    shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试: 

      sh -x strangescript 

      这将执行该脚本并显示所有变量的值。 

      shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用: 

      sh -n your_script 

      这将返回所有语法错误。


    展开全文
  • Linux Tomcat JVM 参数调优

    千次阅读 2017-10-18 17:15:24
    Linux JVM 参数调优 适用场景Tomcat 长期运行过程遇到Caused by: java.lang.OutOfMemoryError: PermGen space或java.lang.OutOfMemoryError: Java heap space错误。异常原因 PermGen space的全称是Permanent ...

    ——————————
    Linux Tomcat JVM 参数调优
    ——————————

    1. 适用场景

      Tomcat 长期运行过程遇到Caused by: java.lang.OutOfMemoryError: PermGen space或java.lang.OutOfMemoryError: Java heap space错误。
      
    2. 异常原因

      PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的。
      Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同。
      GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
      这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

    Java heap space:

    JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

    Heap size 的大小是Young Generation 和Tenured Generaion 之和。JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

    Heap Size 最大不要超过可用物理内存的80%

    一般的要将-Xms和-Xmx选项设置为相同(java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源)。而-Xmn为1/4的-Xmx值。

    个人对上面这句话做个补充,“推荐Xms和Xmx设置值为相同”,并不适用于所有情况,要根据实际情况而定。 当服务器多个tomcat同时运行时,(Xms要肯定小于Xmx)建议每个tomcat 设置 Xms = 1/2Xmx或2/3Xmx。理由是当某个tomcat高峰时,可以弹性分配内存空间。无可避免以上重新分配分隔内存的效率问题。

    1. 解决办法

      修改TOMCAT_HOME/bin/catalina.sh文件:

    # OS specific support.  $var _must_ be set to either true or false.
    JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true"
    
    cygwin=false
    
    darwin=false

    加入以上红色JAVA_OPTS行记录后重启tomcat服务,其中JAVA_OPTS各参数的具体数值大小须根据实际服务器物理内存大小进行分配。

    1. 监控JVM

      4.1 查看jdk安装路径

    可选择的命令:
    
    [root@iZ25bzw04lpZ /]# whereis java
    java: /usr/bin/java /usr/share/java
    
    [root@iZ25bzw04lpZ /]# echo $JAVA_HOME
    /usr/java/jdk1.7.0_67
    
    [root@iZ25bzw04lpZ /]# which java
    /usr/java/jdk1.7.0_67/bin/java
    
    [root@iZ25bzw04lpZ /]# echo $PATH
    /usr/java/jdk1.7.0_67/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    4.2 查看java进程

    采用jdk提供的jps(JavaVirtual Machine Process Status Tool)小工具,可查看当前Java进程。

    [root@iZ25bzw04lpZ /]# cd ./usr/java/jdk1.7.0_67/
    [root@iZ25bzw04lpZ jdk1.7.0_67]# ls -l
    total 19760
    drwxr-xr-x 2 root root     4096 Jul 10  2015 bin
    -rw-r--r-- 1 root root     3339 Jul 26  2014 COPYRIGHT
    drwxr-xr-x 4 root root     4096 Jul 10  2015 db
    drwxr-xr-x 3 root root     4096 Jul 10  2015 include
    drwxr-xr-x 5 root root     4096 Jul 10  2015 jre
    drwxr-xr-x 5 root root     4096 Jul 10  2015 lib
    -rw-r--r-- 1 root root       40 Jul 26  2014 LICENSE
    drwxr-xr-x 4 root root     4096 Jul 10  2015 man
    -rw-r--r-- 1 root root      114 Jul 26  2014 README.html
    -rw-r--r-- 1 root root      499 Jul 26  2014 release
    -rw-r--r-- 1 root root 19902868 Jul 26  2014 src.zip
    -rw-r--r-- 1 root root   110114 Jul 25  2014 THIRDPARTYLICENSEREADME-JAVAFX.txt
    -rw-r--r-- 1 root root   173559 Jul 26  2014 THIRDPARTYLICENSEREADME.txt
    进入JDK目录后,执行bin/jps -v:
    
    [root@iZ25bzw04lpZ jdk1.7.0_67]# bin/jps -v
    
    默认没有设置
    15257 Bootstrap -Djava.util.logging.config.file=/Data/tomcat7ssl/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/Data/tomcat7ssl/endorsed -Dcatalina.base=/Data/tomcat7ssl -Dcatalina.home=/Data/tomcat7ssl -Djava.io.tmpdir=/Data/tomcat7ssl/temp

    4.3 查看JVM的GC情况

    使用jstat工具查看,语法为:

    jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]参数解释:
    
    *Options   -选项,我们一般使用-gcutil查看GC情况
    
    vmid      -VM的进程号,即当前运行的java进程号
    
    interval   -间隔时间,单位为秒或毫秒
    
    [root@iZ25bzw04lpZ jdk1.7.0_67]# bin/jstat -gcutil 15257
      S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      0.00  97.65  29.84  79.97  99.29     17    0.661     1    0.271    0.932

    设置完后

    18860 Bootstrap
    -Djava.util.logging.config.file=/Data/tomcat7ssl/conf/logging.properties
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms512m -Xmx3072m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.endorsed.dirs=/Data/tomcat7ssl/endorsed -Dcatalina.base=/Data/tomcat7ssl -Dcatalina.home=/Data/tomcat7ssl -Djava.io.tmpdir=/Data/tomcat7ssl/temp

    [root@iZ25bzw04lpZ jdk1.7.0_67]# bin/jstat -gcutil 18860 3000
      S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      4.68   0.00  97.98  68.79  54.39     14    2.448     1    1.630    4.078

    参数说明如下:

    S0 -Heap上的Survivor space 0区已使用空间的百分比

    S1 -Heap上的Survivor space 1区已使用空间的百分比

    E -Heap上Eden space区已使用空间的百分比

    O -Heap上的Old space区已使用空间的百分比,达到100%,就是内存溢出了

    P -Perm space区已使用空间的百分比,达到100%,就是内存溢出了

    YGC -从应用程序启动到采样时发生Yang GC 的次数

    YGCT -从应用程序启动到采样时Yang GC所用的时间【单位秒】

    FGC -从应用程序启动到采样时Full GC的次数

    FGCT -从应用程序启动到采样时Full GC所用的时间

    GCT -从应用程序启动到采样时用于垃圾回收的总时间【单位秒】

    通过监控O、P数值情况,再次调整JAVA_OPTS相关参数大小达到优化目的。

    展开全文
  • linuxsh脚本的写法

    万次阅读 2018-10-24 15:47:45
     #错误方式,linux会认为date8是指令并且去执行,这时候会报20181111是不可识别的指令  #"$date8"&gt;&gt;'bg_action_'$date'.txt'  #正确方式  echo "$date8"&gt;&gt;'bg_...

    先介绍遇到的问题

    遇到shell问题:
    1将变量中的内容输入到某个文件
        date8=20181111
        #错误方式,linux会认为date8是指令并且去执行,这时候会报20181111是不可识别的指令
        #"$date8">>'bg_action_'$date'.txt'
        #正确方式
        echo "$date8">>'bg_action_'$date'.txt'
    2按行读取文件,并且将读取内容作为变量
    #定义了变量n作为行数
    n=1
    while ((n<=$(cat 'bg_action_'$date'.txt'|wc -l)))
    do
        echo $n
        #重点在这里,需要对$n加上单引号,否则$n是无法识别的,而且$在sed指令有特指
        date8=$(sed -n ''$n'p' a.txt)
        ((n+=1))
        date8Num=$(sed -n ''$n'p' a.txt)
    done

     

    1 开头
    程序必须以下面的行开始(必须方在文件的第一行):
    #!/bin/sh
    符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
    当编写脚本完成时,如果要执行该脚本,还必须使其可执行。
    要使编写脚本可执行:
    编译 chmod+x filename 这样才能用./filename 来运行
    2 注释
    在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。
    如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
    3 变量
    在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
    #!/bin/sh
    #对变量赋值:
    a=”hello world”
    # 现在打印变量a的内容:
    echo “A is:”
    echo $a
    有时候变量名很容易与其他文字混淆,比如:
    num=2
    echo “this is the $numnd”
    这并不会打印出”this is the 2nd”,而仅仅打印”this is the“,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
    num=2
    echo “this is the ${num}nd”
    这将打印: this is the 2nd
    4 环境变量
    由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
    5 Shell命令和流程控制
    在shell脚本中可以使用三类命令:
    1)Unix 命令:
    虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
    常用命令语法及功能
    echo “some text”: 将文字内容打印在屏幕上
    ls: 文件列表
    wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
    cp sourcefile destfile: 文件拷贝
    mv oldname newname : 重命名文件或移动文件
    rm file: 删除文件
    grep ‘pattern’ file:在文件内搜索字符串比如:grep ’searchstring’ file.txt
    cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut-b5-9 file.txt千万不要和cat命令混淆,
    这是两个完全不同的命令
    cat file.txt:输出文件内容到标准输出设备(屏幕)上
    file somefile:得到文件类型
    read var: 提示用户输入,并将输入赋值给变量
    sort file.txt: 对file.txt文件中的行进行排序
    uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
    expr: 进行数学运算Example: add 2 and 3expr 2 “+” 3
    find: 搜索文件比如:根据文件名搜索find . -name filename -print
    tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
    basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
    dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
    head file:打印文本文件开头几行
    tail file :打印文本文件末尾几行
    sed:Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将
    结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus替换为LinuxFocus :cat text.file | sed ’s/linuxfocus/LinuxFocus/’>newtext.fileawk: awk用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。
    catfile.txt | awk -F, ‘{print $1 “,”$3}’这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34,IndiaKerryMiller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller,USA
    2) 概念: 管道, 重定向和 backtick
    这些不是系统命令,但是他们真的很重要。
    管道 (|) 将一个命令的输出作为另外一个命令的输入。
    grep “hello” file.txt | wc -l
    在file.txt中搜索包含有”hello”的行并计算其行数。
    在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
    重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
    > 写入文件并覆盖旧文件
    >> 加到文件的尾部,保留旧文件内容。
    反短斜线
    使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
    命令:
    find . -mtime -1 -type f -print
    用来查找过去24小时(-mtime–2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下linux 脚本:
    #!/bin/sh
    # The ticks are backticks (`) not normal quotes (‘):
    tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
    3) 流程控制
    1.if
    “if” 表达式 如果条件为真则执行then后面的部分:
    if ….; then
    ….
    elif ….; then
    ….
    else
    ….
    fi
    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
    通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
    [ -f "somefile" ] :判断是否是一个文件
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    [ -n "$var" ] :判断$var变量是否有值
    [ "$a" = "$b" ] :判断$a和$b是否相等
    执行man test可以查看所有测试表达式可以比较和判断的类型。
    直接执行以下脚本:
    #!/bin/sh
    if [ "$SHELL" = "/bin/bash" ]; then
    echo “your login shell is the bash (bourne again shell)”
    else
    echo “your login shell is not bash but $SHELL”
    fi
    变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。
    快捷操作符
    熟悉C语言的朋友可能会很喜欢下面的表达式:
    [ -f "/etc/shadow" ] && echo “Thiscomputer uses shadow passwors”
    这里 &&就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。
    您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印” This computer usesshadow passwors”。同样或操作(||)在shell编程中也是可用的。这里有个例子:
    #!/bin/sh
    mailfolder=/var/spool/mail/james
    [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1;}
    echo “$mailfolder has mail from:”
    grep “^From ” $mailfolder
    该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From”一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
    ◆打印错误信息
    ◆退出程序
    我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
    不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。
    不用与和或操作符,我们也可以用,如果表达式作任何事情,但是使用与或操作符会更便利很多。

    还有一些特殊变量

    变量 含义
    $ 0 当前脚本的文件名
    $ N 传递给脚本或函数的参数.n是一个数字,表示第几个参数。例如,第一个参数是$ 1,第二个参数是$ 2。
    $# 传递给脚本或函数的参数个数。
    $ * 传递给脚本或函数的所有参数。
    $ @ 传递给脚本或函数的所有参数。被双引号(“”)包含时,与$ *稍有不同,下面将会讲到。
    $? 上个命令的退出状态,或函数的返回值。
    $$ 当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID。

     

    $ *和$ @的区别

    $ *和$ @都表示传递给函数或脚本的所有参数,不被双引号(“”)包含时,都以“$ 1”“$ 2”......“$ n”的形式输出所有参数。

    但是当它们被双引号(“”)包含时,“$ *”会将所有的参数作为一个整体,以“$ 1 $ 2 ... $ n”的形式输出所有参数;“$ @”会将各个参数分开,以“$ 1” “$ 2”......“$ n”的形式输出所有参数。

     

    shell脚本中一些特殊符号可以借鉴https://www.cnblogs.com/xuxm2007/archive/2011/10/20/2218846.html

     

    借鉴:https//blog.csdn.net/guo1988kui/article/details/79481971

    https://www.cnblogs.com/davygeek/p/5670212.html

     

    展开全文
  • linuxsh 的使用

    千次阅读 2015-02-28 14:32:40
    Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,...
  • linux挂载mount参数优化

    千次阅读 2017-05-10 10:03:11
    在一次挂载 硬盘时,前辈跟我讲的一些维护mount参数,委实之前没听说过, 然后就查了一些资料,然后才发现这些参数可以提供硬盘的使用效率, 具体的思路就是在内核级别做调整,就是调整filesystem访问记录等,减少...
  • linux之位置参数

    千次阅读 2011-07-12 11:19:31
    位置参数(Positional Parameters) --------------------------------------------------------------------------------所谓的位置参数便是0,1,2,3,4,5,6,7,8,9...。
  • 参数的目的之一是为Linux指定使用的内存数量:如mem=96MB,目的之二是指定mem=nopentium告诉内核不要使用4MB分页表。 (9)“ noinitrd” (仅当内核配置了选项 CONFIG_BLK_DEV_RAM和CONFIG_BLK_DEV_...
  • Linux tar exclude参数的用法

    万次阅读 2014-01-13 17:08:38
    最近在对Oracle 数据库使用冷备tar迁移时,遇到需要将当前数据库文件下下的datapump导出的文件过滤掉,要不然然会产生很大的tar文件以及耗用网络传输时间。其实tar命令为我们提供了过滤功能,只不过由于过滤功能通常...
  • Linux系统sh脚本编写

    千次阅读 2019-06-06 15:43:38
    用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod +x filename 这样才能用...
  • linux启动参数详解

    千次阅读 2013-11-26 11:44:31
    Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。     如果不使用启动...
  • Linuxsh脚本编写基础知识

    千次阅读 2014-08-13 22:43:14
    用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod +xfilename 这样...
  • linux shell参数传递

    千次阅读 2014-08-07 21:01:04
    递的参数 函数和 shell 脚本的妙处之一是,通过向单个函数或脚本传递参数 能够使它们表现出不同的行为。在本节中,您将了解到如何识别和使用传递的参数。 在函数或脚本中,您可以使用表 1 中列出的 bash 特殊...
  • linux下执行.sh文件的方法和语法

    万次阅读 多人点赞 2016-09-19 15:04:58
    linux下执行.sh文件的方法  .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。     是bash脚本么  可以用touch test.sh #创建test.sh文件  vi test.sh #编辑test.sh文件  ...
  • cp (复制档案或目录) [root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination) [root@linux ~]# cp ...参数: -a :相当于 -pdr 的意思; -d :若来源文件为连结文件的属性(link file),则复
  • 一、使用背景 鉴于业务需求,需要编写一个脚本文件,用于不间断的获取一些信息。...touch test.sh(2)编写test.sh 文件vim test.sh //此时开始编写 i //进入编写模式//下面是.sh文件内容 #!/bin/bash
  • (转载)linux内核引导参数

    千次阅读 2006-01-30 10:32:00
    linux内核引导参数1.“boot=” 此参数指明包含引导扇区的设备名(如:/dev/had),若此项忽略,则从当前的根分区中读取引导扇区。2.“root=” 此参数告诉内核启动时以哪个设备作为根文件系统使用,其设定值为构造...
  • ARM Linux RTC 时间的读取与设置

    千次阅读 2018-06-06 12:09:54
     RTC 芯片采用 PCF8563T,Linux 系统使用 date 设置时间后用 hwclock -w 同步到 RTC,一段时间Linux 系统时间与本地时间相差 8 个小时。 分析问题  直觉告诉我们这是时区造成的,要么是系统的时区配置不对...
  • Linux 内核网络参数的意义及应用

    千次阅读 2004-08-27 23:50:00
    本文主要介绍了linux系统位于目录/proc/sys/net/ipv4/下的部分内核网络参数,同时对通过linux内核网络参数的调整来提高linux系统的安全性和稳定性提出了自己的见解。从而为系统管理员进一步增强网络的安全性和系统的...
  • Linux系统时间与RTC时间

    万次阅读 2012-12-13 16:45:20
    Linux的RTC驱动相对还是比较简单的,可以将它作为一个普通的字符型设备,或者一个misc设备,也可以是一个平台设备,这都没有关系,主要还是对rtc_ops这个文件操作结构体中的成员填充,这里主要涉及到两个方面比较...
  • Linux中创建 .sh 的方法

    千次阅读 2019-05-12 17:13:06
    .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。 是bash脚本么 可以用touch test.sh #创建test.sh文件 vi test.sh #编辑test.sh文件 加入内容 #!/bin/bash mkdir test 保存...
  • Linux常用基本命令及选项参数总结

    万次阅读 2020-05-17 11:00:32
    创建一个文件,-d 更改文件或目录的时间参数;例:touch -d 00:12 filename mkdir 创建一个目录,-p递归地创建多级目录;例:mkdir -p dirname rmdir 删除目录,-p递归删除指定目录,当子目录删除后其父目录为空...
  • linux 下 .sh 文件语法

    千次阅读 2012-11-11 21:37:00
    用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod+x filename 这样才能用....
  • linuxsh脚本文件的语法及使用

    万次阅读 2018-03-08 11:25:43
    用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。当编写脚本完成时,如果要执行该脚本,还必须使其可执行。要使编写脚本可执行:编译 chmod+x filename 这样才能用./...
  • Linux内核网络参数的意义及应用

    千次阅读 2012-07-24 16:16:45
    参数,同时对通过linux内核 网络 参数的调整来提高linux系统的安全性和稳定性提出了自己的见解。从而为系统管理员进一步增强 网络 的安全性和系统的稳定性提供了参考。    在linux中,我们可以根据不同的需求来...
  • Linux下执行.sh的方法及语法

    千次阅读 2018-01-22 14:28:45
    linux下执行.sh文件的方法  .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。     是bash脚本么  可以用touch test.sh #创建test.sh文件  vi test.sh #编辑test.sh文件  ...
  • linux scp命令参数及用法详解

    千次阅读 2014-09-15 11:52:26
    如图所示建立连接后开始传输文件,显示百分比、实际时间和传送速度等信息 二、将远程服务器上的文件复制到本机 #scp remote@www.abc.com:/usr/local/sin.sh /home/administrator remote 通过remote用户登录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,812
精华内容 49,524
关键字:

linuxsh时间参数

linux 订阅