linux中写shell_linux中 写shell程序,用于统计文件中关键字的个数 - CSDN
  • Linux下编写shell

    千次阅读 2018-06-17 23:12:48
    vi编辑器是所有linux/UNIX操作系统的标准编辑器,也是目前linux系统最基本的文本编辑器,主要工作在字符模式下,由于不需要图形界面支持,因此它的效率很高。怎么进入vim呢?在命令行输入 vim 文件名例如,我要...
    vi编辑器是所有linux/UNIX操作系统中的标准编辑器,也是目前linux系统最基本的文本编辑器,主要工作在字符模式下,
    由于不需要图形界面支持,因此它的效率很高。
    怎么进入vim呢?在命令行中输入 vim 文件名

    例如,我要创建一个helloworld文件就输入

    vim helloworld


    回车后就进入了编辑模式。下图就是编辑模式



    但是现在还不能直接输入,要按一下键盘上的i,注意到左下角的文件名变成了INSERT,这就可以开始,敲代码了,如图



    保存文件,推出编辑

    怎样保存文件退出呢?先按下esc,再按冒号,最后输入wq,回车,如图



    执行

    执行的时候用命令 bash 文件名,在本例中就是
    bash helloworld
    执行结果如图


    如果你想用

    ./helloworld

    这种方式执行,需要先赋予用户可执行权限,如下

    chmod u+x helloworld

    chmod 命令可以修改目录和文件的访问权限,u代表文件的所有者,+代表添加后面的权限,x代表可执行权限 ,如图


    到这里,整个过程就讲解完了。

    展开全文
  • Linux中编写Shell脚本

    万次阅读 多人点赞 2020-02-04 17:02:12
    Shell 的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令的用法 $[]符号的运算示例 Shell脚本的条件测试 几种条件测试语句 文件测试操作符 字符串...

    目录

    Shell

    Shell脚本的执行

    Shell脚本编写规范

    Shell 中的变量

    变量的算术运算

    双小括号 (())  数值运算命令的用法

    let 运算命令的用法

    expr 命令的用法

    br 命令的用法

    $[] 符号的运算示例

    Shell脚本的条件测试

    几种条件测试语句

    文件测试操作符

    字符串测试操作符

    整数二元比较操作符

    逻辑操作符

    测试表达式 test 、[] 、[[]] 、 (()) 的区别

    if 条件判断语句

    case 条件判断语句

    for循环语句

    while循环语句

    Break、Continue、exit 循环控制语句

    Shell脚本执行scrapy爬虫和python脚本


    Shell

    Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。

    当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。 在Shell脚本里内置了很多命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。 Shell脚本语言很适合用于处理纯文本型的数据,而Linux系统中几乎所有的配置文件、日志文件,以及绝大对数的启动文件都是纯文本类型的文件。
    Shell 脚本的类型
    Shell脚本语言是弱类型语言(无须定义变量的类型即可使用),在Unix/Linux中主要有两大类shell: 
    一类是 Bourne  shell ,另一类是 C shell

    1. Bourne shell 包括 Bourne shell (sh)、Korn shell(ksh)、Bourne Again Shell 三种类型。 
    2. C shell包括csh、tcsh两种类型

    查看系统默认的shell: echo  $SHELL
    查看系统支持的shell: cat  /etc/shells

    Shell脚本的执行

    Shell脚本的执行通常可以采用以下几种方式。

    1、bash script-namesh script-name     这是当脚本文件本身没有执行权限时常使用的方法

    2、path/script-name./script-name    在当前路径下执行脚本,需要将脚本文件的权限改为可执行。然后使用脚本的绝对路径或相对路径就可以直接执行脚本了。

    3、source script-name.  script-name 这种方法通常是使用source或 “.”(点号)读入或加载指定的Shell脚本文件,然后依次执行指定的Shell脚本中的语句。这些语句将在当前父 shell 脚本进程中执行(其他几种模式都会启用新的进程执行该脚本进程)。

    Shell脚本编写规范

    Shell脚本的开发规范及习惯非常重要,虽然这些规范不是必须要遵守的,但有了好的规范和习惯,可以大大提升开发效率,并能在后期降低对脚本的维护成本。

    1、一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:#!/bin/bash  或 #!  /bin/sh     bash 与 sh 的区别 , sh 为 bash的软连接,大多数情况下,脚本使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用    #!/bin/bash 

    2、在shell脚本中,跟在 # 后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被当做程序来执行,仅仅是给开发者和使用者看的,系统解释器是看不到的,更不会执行。注释可以自成一行,也可以跟在脚本命令的后面与命令在同一行。 注释尽量不要使用中文,在脚本中最好也不要有中文。

    3、Shell脚本的开头会加版本、版权等信息

    # Date:16:29 2018-10-20 
    # Author: Create by xiaoxie
    # Description: This script function is …… 
    # Version: 1.1 

    4、在shell脚本中尽量不用中文注释,尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰。

    5、Shell脚本的命名应以.sh为扩展名 例如:1.sh

    6、成对的符号应尽量一次性写出来,然后退格在符号内增加内容,以防止遗漏。这些成对的符号包括: {}、[]、‘’、“”  等

    7、中括号[]两端至少要有1个空格,因此,键入中括号时即留出空格[  ],然后在退格键入中间内容,并确保两端都至少由一个空格。

    8、对于流程控制语句,应一次性将格式写完,再添加内容。 如:一次性完成for循环语句的格式

    for
    do
         内容
    done

    9、通过缩进让代码更易读,如:

    if 条件内容     
           then         
                内容 
    fi 

    10、对于常规变量的字符串定义变量值应加双引号,并且等号前后不能有空格,需要强引用的,则用单引号(‘’),如果是命令的引用,则用反引号(``)。

    11、脚本中的单引号、双引号及反引号必须为英文状态下的符号。

    Shell 中的变量

    简单地说,变量就是用一个固定的字符串(也可能是字符、数字等的组合)代替更多、更复杂的内容,该内容里可能还会包含变量、路径、字符串等其他内容。 变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存中变量的名字就可以读取出与变量对应的数据。

    变量的赋值方法为: 先写变量名称,紧接着是 "=" ,最后是值。中间无任何空格。 通过echo命令加上  $变量名,即可输出变量的值。 双引号,以防止出错变量的值一般要加上。

    定义变量时变量名建议用大写,如  A=xie     B=99

    read  -p  “提示信息”   变量名      #交互式赋值方法

    查看变量内容 echo $A  或  echo ${A}

    赋值时使用引号的作用

    • 双引号:允许通过$符号引用其他变量值
    • 单引号:禁止引用其他变量值,$视为普通字符
    • 反撇号:命令替换,提取命令执行后的输出结果 全局变量的定义方法 export 变量名

    位置参数

    位置参数是一种在调用 Shell 程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。 位置参数之间用空格分隔,Shell取第一个位置参数替换程序文件中的 $1,第二个替换 $2 , 依次类推。$0 是一个特殊变量,它的内容是当前这个shell程序的文件名,所以 $0 不是一个位置参数。

    假如我现在有一个 1.sh脚本文件,内容如下

    #! /bin/bash
    echo $1
    echo $(($2+$3))
    

    当我执行时,我在文件名后加3个参数

    预定义变量

    预定义变量和环境变量相类似,也是在Shell一开始就定义的变量,不同的是,用户只能根据shell的定义来使用这些变量,所有预定义变量都是由符号“$”和另一个符号组成。 常见的Shell预定义变量有以下几种。

    • $# :位置参数的数量
    • $* :所有位置参数的内容
    • $? :命令执行后返回的状态,0表示没有错误,非0表示有错误
    • $$ :当前进程的进程号
    • $! :后台运行的最后一个进程号
    • $0 :当前执行的进程名

    假如我现在有一个 1.sh脚本文件,内容如下

    #! /bin/bash
    
    echo $1
    echo ${2}+${3}
    
    echo $#             #打印出位置参数的数量
    echo $*             #打印出位置参数的内容
    echo $?             #打印出命令执行后返回的状态
    echo $$             #打印出当前进程的进程号
    echo $0             #打印出当前进程的进程名
    

    当我执行时,我在文件名后加3个参数

    参考文章:Linux中环境变量的设置

    变量的算术运算

    Shell中常见的算术运算符

    Shell 中常见的算术运算命令

    双小括号 (())  数值运算命令的用法

    双小括号 (()) 的作用是进行数值运算与数值比较,它的效率很高,用法灵活,是Linux下常用的运算操作符。其操作方法如下:

    let 运算命令的用法

    let运算命令的语法格式为: let 赋值表达式  

    let 赋值表达式的功能等同于“((赋值表达式))” 范例:  给变量 i 加8

     

    expr 命令的用法

    1、expr 用于运算 
       语法:expr 表达式 
       范例:expr 2 + 2 ; expr 2 – 2 ; expr 2  \*  2 ;  expr 2  /  2    
       注意:运算符号和数字之间要有空格!!

    2、expr配合变量计算

    expr在Shell中可配合变量进行计算,但需要用反引号将计算表达式括起来。

    3、利用 expr 计算字符串的长度

    br 命令的用法

    bc 是UNIX/Linux下的计算器,除了作为计算器来使用,还可以作为命令行计算工具使用

    交互模式 在shell命令行直接输入 bc 及能进入bc语言的交互模式

    bc也可以进行非交互式的运算,方法是与 echo 一起使用,所以我们就可以写在脚本里面

    $[] 符号的运算示例

    Shell脚本的条件测试

    通常,在shell的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时候也会与 if 等条件语句相结合,来完成测试判断,以减少程序运行错误。

    几种条件测试语句

    文件测试操作符

    常用文件测试操作符 说明
    -d   , d的全拼为 directory 文件存在且为目录则为真
    -f   ,   f的全拼为  file 文件存在且为文件则为真
    -e , e的全拼为 exists 文件存在则为真
    -s ,s的全拼为 size 文件存在且大小不为0则为真
    -r ,r的全拼为 read 文件存在且可读则为真
    -w ,w的全拼为write 文件存在且可写则为真
    -x ,x的全拼为executable 文件存在且可执行则为真
    -L ,L的全拼为link 文件存在且为链接文件则为真
    f1 -nt  f2  ,nt的全拼为 newer than 文件f1比文件f2新则为真
    f1 -ot f2 ,ot的全拼为older than 文件f1比文件f2旧则为真

    注:(())不能用于文件测试,文件测试一般常用的是 []

    字符串测试操作符

    常用字符串测试操作符 说明
    -n   若字符串长度不为0,则为真
    -z 若字符串长度为0,则为真
    “字符串1”  ==  “字符串2” 若字符串1等于字符串2,则为真
    “字符串1”  !=  “字符串2” 若字符串1不等于字符串2,则为真

    注: == 和 !=  两端要有空格  ,(())不能用于字符测试

    整数二元比较操作符

    在[]以及test中使用的比较符号 在(())和[[]]中使用的比较符号 说明
    -eq == 或 = 相等,全拼为  equal
    -ne !=

    不相等,全拼为 not equal

    -gt > 大于,全拼为 greater than
    -ge >= 大于等于,全拼为 greater equal
    -lt < 小于,全拼为 less than
    -le <= 小于等于 ,全拼为less equal
    • "="和"!="也可以在[]中作比较使用,但在[]中使用包含"<"和">"的符号时,需要用反斜线转义,有时不转义虽然语法不会报错,但是结果可能不对。
    • 也可以在[[]]中使用包含“-gt”和“-lt”的符号,但是不建议使用
    • 比较符号两端也要有空格,[] (())  [[]]  两端都要有空格

    逻辑操作符

    在[]和test中使用的操作符 在[[]]和(())中使用的操作符 说明
    -a && and ,与,两端都为真,才为真
    -o || or ,或, 两端有一个为真,就为真
    ! ! not ,非, 两端相反,则结果为真

    测试表达式 test 、[] 、[[]] 、 (()) 的区别

    测试表达式符号 test [] [[]] (())
    边界是否需要空格 需要 需要 需要 不需要
    逻辑操作符 ! 、-a、 -o ! 、-a、 -o ! 、&& 、 || ! 、&& 、 ||
    整数比较操作符 -eq 、 -gt 、-lt、-ge 、-le -eq 、 -gt 、-lt、-ge 、-le -eq 、 -gt 、-lt、-ge 、-le 或  = 、>  、< 、 >= 、 <= = 、>  、< 、 >= 、 <=
    字符串比较操作符 = 、 == 、!= = 、 == 、!= = 、 == 、!= 不支持
    文件操作 -d、-f、-e、-r、-s、-w、-x、-L、-nt、-ot -d、-f、-e、-r、-s、-w、-x、-L、-nt、-ot -d、-f、-e、-r、-s、-w、-x、-L、-nt、-ot 不支持
    是否支持通配符匹配

    不支持

    不支持 支持 不支持

    if 条件判断语句

    #####单条件判断##############
    if  条件判断
      then 
          命令
    else
          命令
    fi
    
    #或
    
    if  条件判断;then 
         命令
    else
         命令
    fi

    ###双条件判断#####
    if 条件判断
      then
          命令
    elif 条件判断
      then 
          命令
    else
       命令
    fi
    
    ##或
    if 条件判断;then
        命令
    elif 条件判断;then 
        命令
    else
        命令
    fi
    

    if语句对于字符串的匹配

    case 条件判断语句

    case条件语句相当于多分支的if/elif/ellse条件语句,但是它比这些条件语句看起来更规范更工整,常被应用于实现系统服务启动脚本等企业应用场景中。

    case  变量  in
            one)
                命令
    ;;
            two)
                 命令
    ;;
             *) 
                 命令
    esac

    for循环语句

    for  条件
    do
       命令
    done
    
    ##或
    
    for  条件;do
       命令
    done

     

    while循环语句

    while  条件
    do
       命令
    done

    Break、Continue、exit 循环控制语句

    break 、continue在条件语句及循环语句(for、while、if等)中用于控制程序走向;而exit则用于终止所有语句并退出当前脚本。

    命令 说明
    break   n 如果省略 n ,则表示跳出整个循环,n 表示跳出循环的成熟
    continue n 如果省略 n ,则表示跳过本次循环,忽略本次循环的剩余代码,进行循环的下一次循环。n表示退到第 n 层继续循环
    exit n 退出当前 shell 程序,n 为上一次程序执行的状态返回值。n 也可以省略,在下一个 shell 里可通过  $?  接收 exit  n 的n值

    Shell脚本执行scrapy爬虫和python脚本

    #! /bin/bash
    cd /opt/project/
    scrapy crawl xx
    python3 test.py

     

    展开全文
  • 第二步 ,使用命令touch来建立一个shell脚本文件 , 后缀名为.sh ; 第三步 ,为上一步建立的文件编辑内容(以hello world为例) 第四步 ,保存 第五步 ,修改权限 第六步 ,执行该文件 二、代码展示 &...

    一、让我们浏览一下整体步骤

    第一步,你要先用ll命令来列出该目录中都包含那些文件(目的是为了防止文件重名不利于查找等等)。
    第二步 ,使用命令touch来建立一个shell脚本文件 , 后缀名为.sh ;
    第三步 ,为上一步建立的文件编辑内容(以hello world为例)
    第四步 ,保存
    第五步 ,修改权限
    第六步 ,执行该文件

    二、代码展示

    >> ll     #列出文件的详细信息
    >> touch test.sh  #新建文件
    >> vim test.sh  #编辑文件指令
      >键入 i
      >输入#!/bin/bash         #自成一行标明shell种类
           echo hello world;   #内容
       键入:  esc       #表示准备退出
       输入:  : wq     #表示保存
     >>chmod +x ./test.sh    #使脚本具有执行权限
     >>./test.sh  #执行脚本 或使用  sh 文件名.后缀
    小知识1:(关于权限)

         在ll中查到的第一列为权限列 r读 – 数字4,w写–数字2,x执行—数字1,3个为一组,第一组是自己的权限,第二组是自己所在组的权限,第三组是所有人的权限。
    改变的话输入:chmod 764 文件名 7=4+2+1,6=4+2, 4=4

    小知识2:(关于关闭脚本文件)

          关闭有两种方式,一种是保存关闭,一种是不保存。
    不保存      键入esc输入:q!
    保存         键入esc输入:wq

    小知识3:(关于执行脚本文件)

    1、        sh 文件名.后缀名
    2、         ./文件名.后缀名

    展开全文
  • linux中利用shell脚本条件执行命令   在linux环境,我们总会有一些命令需要经常用,例如经常跳转到某些目录下或者执行某些命令,输入一连串的命令是很烦的,此时我们可以预先一些脚本然后根据我们的选择自动...

    linux中利用shell脚本条件执行命令

     

    在linux环境中,我们总会有一些命令需要经常用,例如经常跳转到某些目录下或者执行某些命令,输入一连串的命令是很烦的,此时我们可以预先写一些脚本然后根据我们的选择自动执行命令,那岂不是完美,本脚本就是为此而生的(以跳转不同的目录举例,当然也可以执行其他命令,这时候只需要类比写shell命令即可) 
    1、首先建一个shell脚本start.sh

    #!/bin/bash
    cd_dir_1="/export/songhongwei/code"
    cd_dir_2="/export/songhongwei/data"
    cd_dir_3="/export/songhongwei/soft"
    echo ""
    echo " 1: cd $cd_dir_1"
    echo " 2: cd $cd_dir_2"
    echo " 3: cd $cd_dir_3"
    echo ""
    read -p "Please input the choice:"  idx
    #if [[ -z "$idx"]];then
    #  echo "no choice,exit"
    if [[ '1' = "$idx" ]];then
      eval "cd $cd_dir_1"
    elif [[ '2' = "$idx" ]];then
      eval "cd $cd_dir_2"
    elif [[ '3' = "$idx" ]];then
      eval "cd $cd_dir_3"
    else
      echo "no choice,exit!"
    fi
    echo ""

    2、然后把该脚本放在某个目录下,例如本人放在了/export/songhongwei/soft/sh 
    3、编辑~/.profile文件把sh目录添加到环境变量即可

    PATH="$HOME/bin:$HOME/.local/bin:/export/songhongwei/soft/sh:$PATH"

    4、在shell或linux终端中可以在任何目录下直接访问该命令

    . start.sh 或 source start.sh

    这里写图片描述

    注: 
    (1)步骤4中,start.sh 前的 点 不能忘记,代表的是在当前bash环境下读取并执行FileName中的命令,否则会新开子进程执行FileName中的命令,此时cd无法再当前bash环境跳转。 
    source、sh、bash、./执行脚本的区别:http://blog.csdn.net/yun90/article/details/22667829 
    (2)添加sh目录到环境变量目的是一方面可以在任何目录下执行FileName中命令,另外可以在该sh目录下添加多个此类脚本。

    展开全文
  • Linux编程return与exilt区别 exit 是用来结束一个程序的执行的,而return只是用来从一个函数返回。 return  return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,...
  • Linux中执行shell脚本的5种方法总结

    万次阅读 2019-04-01 15:25:00
    Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码代码如下: cd /data/shell ./hello.sh ./的意思...
  • Linux Shell 之 Shell中的函数调用

    万次阅读 多人点赞 2013-07-16 13:45:49
    说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总结一下...
  • Linux 执行Shell 脚本的方式(三种方法)

    万次阅读 多人点赞 2017-07-30 21:47:25
    Linux中Shell脚本的执行(三种方法)
  • Linux中使用shell脚本向文件中写数据

    千次阅读 2016-09-20 19:22:03
    以前没shell脚本,懂得一些Linux的操作命令。看了网上一些shell脚本的方法。总结,发现用脚本将一些数据写入文件比较实用。遂举例如下: #!/bin/bash #Test echo "This is shell to test" cd /home/wxy/shell/ ...
  • Linux中执行shell脚本的4种方法总结

    万次阅读 2016-10-08 16:04:27
    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下bash shell脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为hello.sh,文件...
  • linux编写shell程序并执行

    万次阅读 多人点赞 2017-03-09 23:43:11
    linux编写shell程序并执行的步骤 简介 我是第一次博客,不知道应该有什么格式和注意事项,请大家多多指教。 今天是要讲讲怎样在linux命令行环境下创建一个脚本程序并运行的。 这对于稍有经验的人来说都不是事...
  • linux下如何编写shell脚本_2012-12-21

    万次阅读 2012-12-21 09:47:56
    我对shell脚本的认识,除了执行过同事shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术blog里记录下来每次的学习的动机,...
  • Linux Shell中的数组及遍历

    万次阅读 2010-12-10 21:08:00
    linux shell 数组 遍历
  • Linux终极shell-Z Shell--用强大的zsh & oh-my-zsh把Bash换掉

    万次阅读 多人点赞 2016-10-06 10:39:33
    大多数的Linux用户偏爱Bash,因为发行版通常默认的就是它。 Bash确实是不错的Shell,但仍有用很多不尽人意的地方,如自动补全的...1 zsh介绍1.1 Linux shellLinux/Unix提供了很多种Shell,为毛要这么多Shell?难道用
  • Linux Shell编程case语句

    万次阅读 2012-10-08 15:47:42
    Linux Shell编程case语句    case语句适用于需要进行多重分支的应用情况。  case分支语句的格式如下:  case $变量名 in  模式1)  命令序列1  ;;  模式2)
  • linux中shell是什么意思

    千次阅读 2017-04-13 09:24:56
    ll程序呢? 简单的说shell程序就是一个包含若干行...在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整 的程序文件. 执行shell程序文件有三种方法 (1)#chmod +x file(在/etc/profile,加入
  • Linux中shell如何切换

    千次阅读 2018-12-23 18:24:34
    Linux中默认使用/bin/bash,在用户创建时,会自动给用户创建用户默认的shell。 root :x :0 :0 :root :/root :/bin/bash 注册用户名:密码:UID:GID:用户信息:用户主目录:命令解释程序 如上,用于默认的shell...
  • Linux命令行与shell的区别

    千次阅读 2018-03-12 15:17:43
    一、什么是shell答: shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。 shell可以通过其条件语句和循环语句等,把一系列linu...
  • 本文主要介绍以下几个命令的区别: shell subshell source $ (commond) 'commond' Linux执行Scripts有两种...不创建subshell,在当前shell环境下读取并执行filename的命令,相当于顺序执行filename里面的命令 ...
  • Linux下编写SHELL命令打开文件

    万次阅读 2018-03-17 17:13:37
    Linux系统下编写SHELL文件来打开文件 通过学习本文档后能够掌握到的知识点 1.新建一个SHELL文件 2.用这个SHELL文件打开一个Linux系统下的其他文件 boonya:“纸上得来终觉浅,绝知此事要躬行。” 1. ...
1 2 3 4 5 ... 20
收藏数 568,710
精华内容 227,484
关键字:

linux中写shell