ubuntu 编写shell脚本文件_ubuntu如何编写shell脚本 - CSDN
精华内容
参与话题
  • Linux shell 脚本编写

    千次阅读 2018-01-30 15:58:23
    1、Unix&Linux,GUN,Ubuntu,Red Hat,Fedora。 2、Linux用户管理。 —Root用户,普通用户,用户组。 —useradd,passwd,usermod,finger,sudo(su),groupadd,groups,whoami,who。 3、文件和目录操作。 ...

    知识点回顾:
    1、Unix&Linux,GUN,Ubuntu,Red Hat,Fedora。
    2、Linux用户管理。
    —Root用户,普通用户,用户组。
    —useradd,passwd,usermod,finger,sudo(su),groupadd,groups,whoami,who。
    3、文件和目录操作。
    —文件名和文件拓展名
    —层次的文件结构
    —In linux,Everything is file,if something is not file,it is ?(process)
    —文件类型:普通文件,符号链接文件,目录文件,设备文件等。
    —Touch,vim,cat,ls,pwd,cd,cp,rm,mkdir,rmdir,file。
    —Chmod,umask。
    —改变文件属主:chown。
    —改变文件用户组:chgrp。
    —其他的一些命令:more,less,tail,head,find。
    4、一个编辑器vi(vim)的使用
    —两种模式:编辑模式,命令模式。
    —Vi基本编辑功能:x, dd, i, c.
    —推出vi:q, q!, wq.

    参考资料
    1、鸟哥的linux私房菜:
    http://linux.vbird.org/linux_basic/0320bash.php#bash
    2、IBM shell编程系列:
    http://www.ibm.com/developerworks/cn/linux/shell/
    3、Linux Shell Scripting(详细英文文档) :
    http://bash.cyberciti.biz/guide/Main_Page

    Shell简介
    1、Shell是什么?
    Shell是系统的用户界面,提供了用户和内核进行互操作的一种接口。它接受用户的输入,并将命令传送到内核中去执行。此外,shell也能被系统中其他有效的linux实用程序和应用程序调用。
    这里写图片描述

    2、学习shell有何用途??
    —自动化工具:自动化软件测试等
    —文本处理:sed,awk
    —批处理
    —Unix界有一句名言:“一行shell脚本胜过万行C程序”
    —求职面试的需求:有兴趣去看看阿里,百度,腾讯等公司的招聘要求。只要是面向系统的几乎全部需要熟悉linux操作系统,熟悉shell编程。

    博主这边主要是在Android系统编译打包时要用到这个shell脚本文件,基本上都是用的这个shell脚本,去操作系统文件导入,压缩,copy,move,makedir,权限修改等,所以我们很有必要去了解这个shell程序的编写

    这里写图片描述
    build.makeimage代码片段:

    if [[ ! $SUDING_BT_VERSION -ne 1 ]];then
        echo "suding bt"
        #bin
        cp -vf $AUTOCHIPS_DIR/packages/externalsysapk/SUDINGBT/bin/*  $OUTPUT_SYS/bin
        #app
        cp -vf $AUTOCHIPS_DIR/packages/externalsysapk/SUDINGBT/apk/*  $OUTPUT_SYS/app
    
        #bt tools
        cp -vrf $AUTOCHIPS_DIR/packages/externalsysapk/SUDINGBT/tools/*  $OUTPUT_SYS
    
        #for bt app save the bt power state file
        if [ ! -f $OUTPUT_DIR/data/power_status ];then
            touch $OUTPUT_DIR/data/power_status
            chmod 666 $OUTPUT_DIR/data/power_status
        fi
    
        #rm mtk apk
        rm -rf $OUTPUT_SYS/app/AutoBT.apk
        rm -rf $OUTPUT_SYS/app/AutoBTService.apk
    else
        echo " mtk bt"
        rm -rf $OUTPUT_SYS/bin/blueletd
        rm -rf $OUTPUT_SYS/bin/bt_test
        rm -rf $OUTPUT_SYS/lib/libbluelet.so
        rm -rf $OUTPUT_SYS/lib/libbt_platform.so
        rm -rf $OUTPUT_SYS/bin/serial_rate_to_file
        rm -rf $OUTPUT_SYS/lib/libserialport_bt.so
        rm -rf $OUTPUT_SYS/app/AutoBtService.apk
        rm -rf $OUTPUT_SYS/app/AutoBtClient.apk
        rm -rf $OUTPUT_SYS/app/AutoBtMusic.apk
    fi

    Shell分类:各个shell中内置命令不相同

    Bourne shell(/bin/sh) 
    C shell(/bin/csh)
    Korn shell(/bin/ksh)
    Bourne again shell(/bin/bash)
    Tenex C shell(tcsh)

    Shell中的变量和变量的设定及使用

    1、shell本地变量:本地变量只在本shell中起作用。
    —变量无需声明
    —变量调用:在变量前加,echoHOME
    —unset删除变脸赋值
    —有条件命令替换:

    ${variable: -value}
    ${variable:=value}
    ${variable: +value}
    ${variable:?message}

    2、环境变量
    —查看环境变量:env
    —常见环境变量作用(实验作业)
    —export将一个局部变量提供给shell的其他命令使用
    —修改环境变量
    3、特定变量参数

    $#:传递给脚本的参数的个数
    $*:显示所有向脚本传递的参数
    $$:脚本运行的id号
    $!:后台运行的第一个进程的id号
    $?:最后一个命令执行情况,0表示没有错误
    $@:所有参数,每次参数使用””括起来

    Shell输入输出重定向
    重定向是什么?将shell命令的标准输入,输出,错误重定向到指定的文件中。

    这里写图片描述
    stdin(0表示):<, <<
    stdout(1表示):>, >>
    stderr(2表示):2>, 2>>
    /dev/null:黑洞

    Pipe
    Pipe是什么?将一个进程的标准输出连接到另外进程的标准输入。
    这里写图片描述
    Pipe简单应用
    —cut:从文件中的每一行剪切一定量的字符,送到stdout。
    —grep
    —sort,wc,uniq
    —tee –a [file],将管道中的数据写入[file]中,同时将数据写入stdin。
    这里写图片描述

    Shell 编写
    1、打造自己的shell编程环境
    —Shell功能
    —Shell中的变量和变量设定,使用
    —个人环境变量配置
    —Shell输入输出重定向
    —Shell中pipe
    2、第一个shell程序Hello Shell
    —Shell程序结构
    —执行shell程序
    3.Shell的输入输出
    4.Shell控制结构
    if – else
    do while
    for
    5.Shell中的函数
    6.Shell脚本调试

    下面编写shell脚本,了解程序结构
    这里写图片描述
    改变文件属性:sudo chmod +x helloshell.sh
    执行该文件: ./helloshell.sh或者是sh ./helloshell.sh

    这里写图片描述

    标准输出:echo,注意转移字符,\t, \n, \”等。
    这里写图片描述
    标准输入: read,cat
    这里写图片描述

    shell控制结构

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    shell中的函数

    这里写图片描述

    这里写图片描述

    其实这个shell 编程语法表现的很随意,shell程序80%的时间基本上都是用于调试的。

    It bombs with a "syntax error" message, or
    It runs, but does not work as expected (logic error)
    It runs, works as expected, but has nasty side effects (logic bomb)
    

    那么该如何调试?
    1、在任何可能出错的地方使用echo打印变量的值。
    这里写图片描述
    2、使用tee命令在关键点检查数据流
    3、设置shell运行时参数
    sh -n your_script:返回所有的语法错误
    sh -x your_script:显示所有变量的值
    4、使用图形化的调试工具
    http://bashdb.sourceforge.net/
    这里写图片描述
    5、使用assert实现

    #!/bin/bash
    # filename: assert.sh
    
    assert ()                 #  If condition false,
    {                         #+ exit from script with error message.
      E_PARAM_ERR=98
      E_ASSERT_FAILED=99
    
      if [ -z "$2" ]          # Not enough parameters passed.
      then
        return $E_PARAM_ERR   # No damage done.
      fi
    
      lineno=$2
    
      if [ ! $1 ]
      then
        echo "Assertion failed:  \"$1\""
        echo "File \"$0\", line $lineno"
        exit $E_ASSERT_FAILED
      # else
      #   return
      #   and continue executing script.
    fi
    }
    
    
    a=5
    b=4
    condition="$a -lt $b"     # Error message and exit from script.
                              #  Try setting "condition" to something else,
                              #+ and see what happens.
    # assert failure
    assert "$condition" $LINENO
    

    demo点击下载

    另附相关参考资料及教程说明:
    http://www.linuxidc.com/Linux/2013-02/79468.htm
    使用env命令查看系统中的换将变量,并解释变量对应的含义。
    http://linux.vbird.org/linux_basic/0320bash.php
    Shell下的gui(libnotify-bin)编程
    http://blog.mpathirage.com/2009/09/12/using-libnotify-in-ubuntu-9-04/

    展开全文
  • linux的脚本有可执行属性就能执行, 跟扩展名没关系,决定是否为shell类型的也只和第一句有关系 写完要执行chmod +x 文件名、加上可执行属性、也可以通过图形用户界面来赋予可执行属性 转载于:...
    sh脚本开头第一行都是这么一句
    #!/bin/bash

    linux的脚本有可执行属性就能执行, 跟扩展名没关系,决定是否为shell类型的也只和第一句有关系 写完要执行chmod +x 文件名、加上可执行属性、也可以通过图形用户界面来赋予可执行属性

    转载于:https://www.cnblogs.com/klobohyz/archive/2011/10/28/2228047.html

    展开全文
  • ubuntu的sh文件编程(一)

    万次阅读 2016-11-15 15:07:18
    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。 输入一些代码: #!/bin/bashecho "Hello World !" “#!” ...

    sh文件是常用的内容,下面内容来自c语言中文网。禁止商业用途,如有侵权,立即删除。

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。


    输入一些代码:
    1. #!/bin/bash
    2. echo "Hello World !"
    “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。echo命令用于向窗口输出文本。

    运行Shell脚本有两种方法。

    作为可执行程序

    将上面的代码保存为test.sh,并 cd 到相应目录:
    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
    注意,一定要写成./test.sh,而不是test.sh。运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

    通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。

    这里的"系统",其实就是shell这个应用程序(想象一下Windows Explorer),但我故意写成系统,是方便理解,既然这个系统就是指shell,那么一个使用/bin/sh作为解释器的脚本是不是可以省去第一行呢?是的。

    作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
    /bin/sh test.sh
    /bin/php test.php
    这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

    再看一个例子。下面的脚本使用 read 命令从 stdin 获取输入并赋值给 PERSON 变量,最后在 stdout 上输出:
    1. #!/bin/bash
    2. # Author : mozhiyan
    3. # Copyright (c) http://see.xidian.edu.cn/cpp/linux/
    4. # Script follows here:
    5. echo "What is your name?"
    6. read PERSON
    7. echo "Hello, $PERSON"
    运行脚本:
    chmod +x ./test.sh
    $./test.sh
    What is your name?
    mozhiyan
    Hello, mozhiyan
    $
    


    Shell支持自定义变量。

    定义变量

    定义变量时,变量名不加美元符号($),如:
    1. variableName="value"
    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
    • 首个字符必须为字母(a-z,A-Z)。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    变量定义举例:
    1. myUrl="http://see.xidian.edu.cn/cpp/linux/"
    2. myNum=100

    使用变量

    使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:
    1. your_name="mozhiyan"
    2. echo $your_name
    3. echo ${your_name}
    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
    1. for skill in Ada Coffe Action Java
    2. do
    3. echo "I am good at ${skill}Script"
    4. done
    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

    推荐给所有变量加上花括号,这是个好的编程习惯。

    重新定义变量

    已定义的变量,可以被重新定义,如:
    1. myUrl="http://see.xidian.edu.cn/cpp/linux/"
    2. echo ${myUrl}
    3. myUrl="http://see.xidian.edu.cn/cpp/shell/"
    4. echo ${myUrl}
    这样写是合法的,但注意,第二次赋值的时候不能写 $myUrl="http://see.xidian.edu.cn/cpp/shell/",使用变量的时候才加美元符($)。

    只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

    下面的例子尝试更改只读变量,结果报错:
    1. #!/bin/bash
    2. myUrl="http://see.xidian.edu.cn/cpp/shell/"
    3. readonly myUrl
    4. myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
    运行脚本,结果如下:
    /bin/sh: NAME: This variable is read only.

    删除变量

    使用 unset 命令可以删除变量。语法:
    1. unset variable_name
    变量被删除后不能再次使用;unset 命令不能删除只读变量。

    举个例子:
    1. #!/bin/sh
    2. myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
    3. unset myUrl
    4. echo $myUrl
    上面的脚本没有任何输出。

    变量类型

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

    1) 局部变量

    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

    2) 环境变量

    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

    3) shell变量

    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。

    例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:

    1. $echo $$
    运行结果
    29949

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

    命令行参数

    运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

    请看下面的脚本:
    1. #!/bin/bash
    2. echo "File Name: $0"
    3. echo "First Parameter : $1"
    4. echo "Second Parameter : $2"
    5. echo "Quoted Values: $@"
    6. echo "Quoted Values: $*"
    7. echo "Total Number of Parameters : $#"
    运行结果:
    $./test.sh Zara Ali
    File Name : ./test.sh
    First Parameter : Zara
    Second Parameter : Ali
    Quoted Values: Zara Ali
    Quoted Values: Zara Ali
    Total Number of Parameters : 2

    $* 和 $@ 的区别

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

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

    下面的例子可以清楚的看到 $* 和 $@ 的区别:
    1. #!/bin/bash
    2. echo "\$*=" $*
    3. echo "\"\$*\"=" "$*"
    4. echo "\$@=" $@
    5. echo "\"\$@\"=" "$@"
    6. echo "print each param from \$*"
    7. for var in $*
    8. do
    9. echo "$var"
    10. done
    11. echo "print each param from \$@"
    12. for var in $@
    13. do
    14. echo "$var"
    15. done
    16. echo "print each param from \"\$*\""
    17. for var in "$*"
    18. do
    19. echo "$var"
    20. done
    21. echo "print each param from \"\$@\""
    22. for var in "$@"
    23. do
    24. echo "$var"
    25. done
    执行 ./test.sh "a" "b" "c" "d",看到下面的结果:
    $*=  a b c d
    "$*"= a b c d
    $@=  a b c d
    "$@"= a b c d
    print each param from $*
    a
    b
    c
    d
    print each param from $@
    a
    b
    c
    d
    print each param from "$*"
    a b c d
    print each param from "$@"
    a
    b
    c
    d

    退出状态

    $? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

    退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

    不过,也有一些命令返回其他值,表示不同类型的错误。

    下面例子中,命令成功执行:
    $./test.sh Zara Ali
    File Name : ./test.sh
    First Parameter : Zara
    Second Parameter : Ali
    Quoted Values: Zara Ali
    Quoted Values: Zara Ali
    Total Number of Parameters : 2
    $echo $?
    0
    $

    $? 也可以表示函数的返回值。

    如果表达式中包含特殊字符,Shell 将会进行替换。例如,在双引号中使用变量就是一种替换,转义字符也是一种替换。

    举个例子:

    1. #!/bin/bash
    2. a=10
    3. echo -e "Value of a is $a \n"
    运行结果:
    Value of a is 10
    这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:
    Value of a is 10\n

    下面的转义字符都可以用在 echo 中:
    转义字符 含义
    \\ 反斜杠
    \a 警报,响铃
    \b 退格(删除键)
    \f 换页(FF),将当前位置移到下页开头
    \n 换行
    \r 回车
    \t 水平制表符(tab键) 
    \v 垂直制表符
    可以使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。

    命令替换

    命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。

    命令替换的语法:
    1. `command`
    注意是反引号,不是单引号,这个键位于 Esc 键下方。

    下面的例子中,将命令执行结果保存在变量中:
    1. #!/bin/bash
    2. DATE=`date`
    3. echo "Date is $DATE"
    4. USERS=`who | wc -l`
    5. echo "Logged in user are $USERS"
    6. UP=`date ; uptime`
    7. echo "Uptime is $UP"
    运行结果:
    Date is Thu Jul  2 03:59:57 MST 2009
    Logged in user are 1
    Uptime is Thu Jul  2 03:59:57 MST 2009
    03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

    变量替换

    变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

    可以使用的变量替换形式:
    形式 说明
    ${var} 变量本来的值
    ${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
    ${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
    ${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
    若此替换出现在Shell脚本中,那么脚本将停止运行。
    ${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

    请看下面的例子:
    #!/bin/bash
    
    echo ${var:-"Variable is not set"}
    echo "1 - Value of var is ${var}"
    
    echo ${var:="Variable is not set"}
    echo "2 - Value of var is ${var}"
    
    unset var
    echo ${var:+"This is default value"}
    echo "3 - Value of var is $var"
    
    var="Prefix"
    echo ${var:+"This is default value"}
    echo "4 - Value of var is $var"
    
    echo ${var:?"Print this message"}
    echo "5 - Value of var is ${var}"
    运行结果:
    1. Variable is not set
    2. 1 - Value of var is
    3. Variable is not set
    4. 2 - Value of var is Variable is not set
    5. 3 - Value of var is
    6. This is default value
    7. 4 - Value of var is Prefix
    8. Prefix
    9. 5 - Value of var is Prefix
    Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    例如,两个数相加:
    1. #!/bin/bash
    2. val=`expr 2 + 2`
    3. echo "Total value : $val"
    运行脚本输出:
    Total value : 4
    两点注意:
    • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

    算术运算符

    先来看一个使用算术运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. val=`expr $a + $b`
    5. echo "a + b : $val"
    6. val=`expr $a - $b`
    7. echo "a - b : $val"
    8. val=`expr $a \* $b`
    9. echo "a * b : $val"
    10. val=`expr $b / $a`
    11. echo "b / a : $val"
    12. val=`expr $b % $a`
    13. echo "b % a : $val"
    14. if [ $a == $b ]
    15. then
    16. echo "a is equal to b"
    17. fi
    18. if [ $a != $b ]
    19. then
    20. echo "a is not equal to b"
    21. fi
    运行结果:
    a + b : 30
    a - b : -10
    a * b : 200
    b / a : 2
    b % a : 0
    a is not equal to b
    注意:
    • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
    • if...then...fi 是条件语句,后续将会讲解。

    算术运算符列表
    运算符 说明 举例
    + 加法 `expr $a + $b` 结果为 30。
    - 减法 `expr $a - $b` 结果为 10。
    * 乘法 `expr $a \* $b` 结果为  200。
    / 除法 `expr $b / $a` 结果为 2。
    % 取余 `expr $b % $a` 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
    != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

    注意:条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]。

    关系运算符

    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

    先来看一个关系运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. if [ $a -eq $b ]
    5. then
    6. echo "$a -eq $b : a is equal to b"
    7. else
    8. echo "$a -eq $b: a is not equal to b"
    9. fi
    10. if [ $a -ne $b ]
    11. then
    12. echo "$a -ne $b: a is not equal to b"
    13. else
    14. echo "$a -ne $b : a is equal to b"
    15. fi
    16. if [ $a -gt $b ]
    17. then
    18. echo "$a -gt $b: a is greater than b"
    19. else
    20. echo "$a -gt $b: a is not greater than b"
    21. fi
    22. if [ $a -lt $b ]
    23. then
    24. echo "$a -lt $b: a is less than b"
    25. else
    26. echo "$a -lt $b: a is not less than b"
    27. fi
    28. if [ $a -ge $b ]
    29. then
    30. echo "$a -ge $b: a is greater or equal to b"
    31. else
    32. echo "$a -ge $b: a is not greater or equal to b"
    33. fi
    34. if [ $a -le $b ]
    35. then
    36. echo "$a -le $b: a is less or equal to b"
    37. else
    38. echo "$a -le $b: a is not less or equal to b"
    39. fi
    运行结果:
    10 -eq 20: a is not equal to b
    10 -ne 20: a is not equal to b
    10 -gt 20: a is not greater than b
    10 -lt 20: a is less than b
    10 -ge 20: a is not greater or equal to b
    10 -le 20: a is less or  equal to b

    关系运算符列表
    运算符 说明 举例
    -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
    -ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
    -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
    -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
    -ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
    -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

    布尔运算符

    先来看一个布尔运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. if [ $a != $b ]
    5. then
    6. echo "$a != $b : a is not equal to b"
    7. else
    8. echo "$a != $b: a is equal to b"
    9. fi
    10. if [ $a -lt 100 -a $b -gt 15 ]
    11. then
    12. echo "$a -lt 100 -a $b -gt 15 : returns true"
    13. else
    14. echo "$a -lt 100 -a $b -gt 15 : returns false"
    15. fi
    16. if [ $a -lt 100 -o $b -gt 100 ]
    17. then
    18. echo "$a -lt 100 -o $b -gt 100 : returns true"
    19. else
    20. echo "$a -lt 100 -o $b -gt 100 : returns false"
    21. fi
    22. if [ $a -lt 5 -o $b -gt 100 ]
    23. then
    24. echo "$a -lt 100 -o $b -gt 100 : returns true"
    25. else
    26. echo "$a -lt 100 -o $b -gt 100 : returns false"
    27. fi
    运行结果:
    10 != 20 : a is not equal to b
    10 -lt 100 -a 20 -gt 15 : returns true
    10 -lt 100 -o 20 -gt 100 : returns true
    10 -lt 5 -o 20 -gt 100 : returns false

    布尔运算符列表
    运算符 说明 举例
    ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
    -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

    字符串运算符

    先来看一个例子:
    1. #!/bin/sh
    2. a="abc"
    3. b="efg"
    4. if [ $a = $b ]
    5. then
    6. echo "$a = $b : a is equal to b"
    7. else
    8. echo "$a = $b: a is not equal to b"
    9. fi
    10. if [ $a != $b ]
    11. then
    12. echo "$a != $b : a is not equal to b"
    13. else
    14. echo "$a != $b: a is equal to b"
    15. fi
    16. if [ -z $a ]
    17. then
    18. echo "-z $a : string length is zero"
    19. else
    20. echo "-z $a : string length is not zero"
    21. fi
    22. if [ -n $a ]
    23. then
    24. echo "-n $a : string length is not zero"
    25. else
    26. echo "-n $a : string length is zero"
    27. fi
    28. if [ $a ]
    29. then
    30. echo "$a : string is not empty"
    31. else
    32. echo "$a : string is empty"
    33. fi
    运行结果:
    abc = efg: a is not equal to b
    abc != efg : a is not equal to b
    -z abc : string length is not zero
    -n abc : string length is not zero
    abc : string is not empty

    字符串运算符列表
    运算符 说明 举例
    = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
    != 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
    -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
    -n 检测字符串长度是否为0,不为0返回 true。 [ -z $a ] 返回 true。
    str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

    文件测试运算符

    文件测试运算符用于检测 Unix 文件的各种属性。

    例如,变量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大小为100字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:
    1. #!/bin/sh
    2. file="/var/www/tutorialspoint/unix/test.sh"
    3. if [ -r $file ]
    4. then
    5. echo "File has read access"
    6. else
    7. echo "File does not have read access"
    8. fi
    9. if [ -w $file ]
    10. then
    11. echo "File has write permission"
    12. else
    13. echo "File does not have write permission"
    14. fi
    15. if [ -x $file ]
    16. then
    17. echo "File has execute permission"
    18. else
    19. echo "File does not have execute permission"
    20. fi
    21. if [ -f $file ]
    22. then
    23. echo "File is an ordinary file"
    24. else
    25. echo "This is sepcial file"
    26. fi
    27. if [ -d $file ]
    28. then
    29. echo "File is a directory"
    30. else
    31. echo "This is not a directory"
    32. fi
    33. if [ -s $file ]
    34. then
    35. echo "File size is zero"
    36. else
    37. echo "File size is not zero"
    38. fi
    39. if [ -e $file ]
    40. then
    41. echo "File exists"
    42. else
    43. echo "File does not exist"
    44. fi
    运行结果:
    File has read access
    File has write permission
    File has execute permission
    File is an ordinary file
    This is not a directory
    File size is zero
    File exists

    文件测试运算符列表
    操作符 说明 举例
    -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
    -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
    -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
    -p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
    -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
    -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
    -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
    -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
    -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
    -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

    展开全文
  • 在linux中编写shell脚本的流程的简单说明 1、使用vim或者gedit建立一个文件,通常来说会用.sh作为文件后缀 2、以 “#!/bin/bash”为第一行语句,其中“#!”被称为“Sha-Bang”符号,是shell脚本的起始符号...
    
    在linux中编写shell脚本的流程的简单说明

    1、使用vim或者gedit建立一个文件,通常来说会用.sh作为文件后缀

    2、以 “#!/bin/bash”为第一行语句,其中“#!”被称为“Sha-Bang”符号,是shell脚本的起始符号,用于说明当前的脚本文件用bin/bash来执行

    3、编写语句,使用#来作为注释的关键字符

    4、使用chmod +x命令来修改脚本文件的权限,使其可执行

    5、此时可以使用./文件名来执行该脚本
    展开全文
  • Ubuntu系统编写shell脚本程序一次安装多个软件包, 编写shell脚本程序一次安装多个软件,主要用于一些软件依赖环境配置。
  • Ubuntushell终端写一个简单脚本

    千次阅读 2017-06-07 20:32:28
    2然后在打开的脚本文件中键入: #!/bin/bash echo "hello world!" 然后保存。 3.在终端中输入 ./hello.sh 然后终端输出:hello world! 脚本运行成功。 本人编写这个主要是因为测试一个shell能否实现简单...
  • ubuntu中写一个shell脚本的过程

    千次阅读 2014-10-28 11:05:08
    gedit hello.sh ,然后输入 #!/bin/bash echo "Hello world!" chmod +x hello.sh ./hello.sh
  • Ubuntu 编写简单的脚本

    万次阅读 2017-08-18 18:01:58
    1、创建一个文件用于存放脚本 mkdir shellPackage 2、创建一个空的文件 toudh myShell 3、编辑文件 我使用的是gedit,也可以使用VIM,这个我不太熟 gedit myShell 4、第一行 #!/bin/bash 5、输入命令 例1、我这里...
  • Ubuntu编写shell脚本

    千次阅读 2015-11-16 21:34:02
    先介绍几个常用命令 $()在bash中叫做 命令替换,回调用一个subshell。通俗点讲,就是被它括起来的命令部分将优先执行。 echo(显示文字) echo $A 表示输出变量A的值 echo [-ne][字符串]或 echo [--help][--...
  • ubuntu编写开机自启动shell脚本

    万次阅读 2013-05-01 17:20:09
    1、首先编写一个简单的shell脚本  vimtest.sh(不习惯使用vim可以使用nano)  进入vim后按i键,然后输入(#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。) #!/bin/bash echo"Helloworld!...
  • ubuntu上第一个shell脚本

    万次阅读 2017-05-27 10:20:08
    参考:https://billie66.github.io/TLCL/book/zh/chap25.htmlUbuntu下第一个shell脚本在home目录下新建文件夹xkmkdir xk进入xk文件夹,新建文件helloshelltouch helloshell在helloshell文件中输入如下内容:#!...
  • Ubuntu构建一个简单基本脚本

    千次阅读 2019-03-17 20:39:23
    但有时候我们需要输入多个命令,并处理多个命令的结果,甚至需要将一个命令的结果传给另一个命令,因此我们需要用到shell脚本,将多个命令串联起来。在shell中如果想要两个命令一起运行,可以把它们放在同一行,同时...
  • Ubuntu下使用shell脚本创建批处理文件

    千次阅读 2015-03-20 19:50:54
    1、使用任何文本编辑器,新建一个文本文件, 2、首行  #!bin/bash //这行告诉系统执行该脚本程序 3、在文本中写入需要执行的代码,比如  cd /home/...  mkdir ... 4、将文件属性修改为可执行:  sudo ...
  • 1、新建个shell脚本文件(例starter.sh) 内容如下 #!/bin/sh ### BEGIN INIT INFO # Provides: starter # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 ...
  • 1.编写一个shell脚本文件,例如python_auto.sh,文件内容: 2.编写start.py文件,里面执行你需要服务器开启执行的操作 3.在 /etc/profile 这个文件中,添加shell脚本文件路径,例如: 在服务器开机时会自动...
  • VSCode 编写 Shell 脚本

    千次阅读 2019-11-21 09:42:05
    VSCode 编写 Shell 脚本 用到的插件: shellman: 语法提示 shell-format: 格式化 shellcheck: 语法错误检查 Remote-WSL(可选): 远程打开WSL(子系统) 上的目录, 运行 shell shellman 直接从应用市场安装即可 shell-...
  • 当前目录下有一些文件和目录,其中每个目录里都有若干.txt文件, ...在ubuntu12.04的shell脚本实现如下: #!/bin/sh # 提示信息 echo "start:" # 定义变量 dst=all pst=.txt # 复制文件到目标文件夹 if [ -d
  • 如何给shell脚本传入参数小结

    万次阅读 2017-08-17 10:32:21
    执行“vim test.sh”创建一个新的shell脚本。脚本test.sh的内容如下: #!/bin/sh name=$1 echo "the ${name} are great man!" 给新创建的test.sh的脚本赋可执行权限,命令为“chmod +x test.sh”
  • ubuntu编写shell脚本开机自动启动

    千次阅读 2019-07-14 02:20:59
    编写脚本是为了不用手动去...# 创建一个后缀为.sh的脚本文件 touch test.sh # 编辑脚本 vim test.sh # test.sh编写脚本内容 2.编写test.sh脚本 1 #!/bin/bash 2 3 ### BEGIN INIT INFO 4 # Provides: ...
  • Linux 下在Shell脚本中创建新终端

    万次阅读 2014-01-02 21:54:34
    gnome-terminal -t "title-name" -x bash -c "sh ./run.sh;exec bash;...-x 后面的为要在打开的终端中执行的脚本,根据需要自己修改就行了。 最后的exec bash;是让打开的终端在执行完脚本后不关闭。
1 2 3 4 5 ... 20
收藏数 14,106
精华内容 5,642
关键字:

ubuntu 编写shell脚本文件