shell脚本 订阅
Shell Script [1]  ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。 展开全文
Shell Script [1]  ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
信息
外文名
Shell
领    域
计算机
中文名
Shell脚本
性    质
名词
Shell脚本基本介绍
换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。更明白地来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。
收起全文
精华内容
下载资源
问答
  • Shell 脚本 100 例《一》 Shell 脚本 100 例《二》 Shell 脚本 100 例《三》 Shell 脚本 100 例《四》 Shell 脚本 100 例《五》 Shell 脚本 100 例《六》 Shell 脚本 100 例《七》 Shell 脚本 100 例《八》 Shell ...
  • shell脚本编程100例

    2018-07-11 16:57:19
    shell脚本100例,非常经典,从简单的脚本,到最后企业实战可用的复杂脚本,非常适合初学者参考学习!
  • 想学习linux系统,shell很重要,这个是很好的shell学习资源!大家一起学习!
  • 比较好的的linux脚本编写学习教程,通过对开发中的一个个小案例由浅入深的讲解,shell脚本的编写,适合初学者入门和提升使用,案例难度逐渐提深,贴近实际开发。希望能帮助到你。
  • 此文档是个人学习了《Linux命令行与shell脚本编程大全》后,整理的学习笔记以及学习心得,希望对大家有所帮助。
  • Linux中编写Shell脚本

    万次阅读 多人点赞 2018-10-08 11:22:35
    Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令的用法 $[]符号的运算示例 Shell脚本的条件测试 几种...
    展开全文
  • shell脚本大全

    热门讨论 2012-11-04 16:36:09
    shell脚本大全
  • Linux在指定文件指定行插入内容shell脚本,参数请见脚本注释
  • linux经典shell脚本

    2013-08-28 09:15:24
    linux经典shell脚本
  • 使用一般的mysql命令或者是sql脚本都可以插入数据到mysql数据表中,我这里介绍如何是Shell批量的从CSV文件中添加数据到mysql数据库中,方便数据迁徙,测试数据的添加之类的工作。
  • Shell脚本编写实战

    千人学习 2017-10-23 16:55:25
    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。 课程内容如下: 1.编写Shell脚本注意事项与编写打印字体颜色函数 2.批量创建用户 3.监控主机存活状态 4.监控CPU、内存、硬盘和网卡流量利用率 5...
  • shell脚本语言(超全超详细)

    万次阅读 多人点赞 2020-04-20 22:26:20
    shell脚本语言1、shell的概述2、脚本的调用形式打开终端时系统自动调用:/etc/profile 或 ~/.bashrc3、shell语法初识3.1、定义以开头:#!/bin/bash3.2、单个"#"号代表注释当前行第一步:编写脚本文件第二步:加上可...

    1、shell的概述

    在这里插入图片描述
    shell 是一种脚本语言
    脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
    shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)
    shell命令解析器:
    系统提供 shell命令解析器: sh ash bash
    查看自己linux系统的默认解析:echo $SHELL
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

    2、脚本的调用形式

    打开终端时系统自动调用:/etc/profile 或 ~/.bashrc

    /etc/profile
    此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置
    开始自启动的程序,一般也在这里设置
    ~/.bashrc
    用户自己的家目录中的.bashrc
    登录时会自动调用,打开任意终端时也会自动调用
    这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等
    用户手动调用:用户实现的脚本
    在这里插入图片描述

    3、shell语法初识

    3.1、定义以开头:#!/bin/bash

    #!用来声明脚本由什么shell解释,否则使用默认shell
    在这里插入图片描述

    3.2、单个"#"号代表注释当前行

    第一步:编写脚本文件

    在这里插入图片描述

    第二步:加上可执行权限

    chmod +x xxxx.sh
    在这里插入图片描述

    第三步:运行

    在这里插入图片描述

    三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

    三种执行方式的不同点(./xxx.sh bash xxx.sh . xxx.sh)

    ./xxx.sh :先按照 文件中#!指定的解析器解析

    如果#!指定指定的解析器不存在 才会使用系统默认的解析器

    bash xxx.sh:指明先用bash解析器解析

    如果bash不存在 才会使用默认解析器

    . xxx.sh 直接使用默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的

    三种执行情况:
    打开终端就会有以后个解释器,我们称为当前解释器
    我们指定解析器的时候(使用 ./xxx.sh 或 bash xxx.sh)时会创建一个子shell解析 脚本
    在这里插入图片描述

    注意:windows下 写脚本 在linux下执行 注意

    在这里插入图片描述
    执行结果:
    在这里插入图片描述
    将windows文件 转换成 unix文件
    方法一:dos2unix 如果没有该插件 需要安装
    sudo apt-get install dos2unix
    dos2unix shell脚本
    转换成功就可以执行运行
    方法二:
    需要用vi打开脚本,在最后一行模式下执行
    :set ff=unix
    在这里插入图片描述

    4、变量

    定义变量
    变量名=变量值
    如:num=10
    引用变量
    $变量名
    unset :清除变量值
    在这里插入图片描述
    运行结果:
    在这里插入图片描述
    从键盘获取值read

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    案例:

    在一行上显示和添加提示 需要加上-p
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    案例:读取多个值

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    案例只读变量:

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    查看环境变量:env

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

    导出环境变量 作用:(让其他shell脚本识别该变量,设为全局变量)

    source 脚本文件
    source命令用法:
    source FileName
    作用:在当前bash环境下读取并执行FileName中的命令。
    注:该命令通常用命令“.”来替代。
    如:source .bash_rc 与 . .bash_rc 是等效的。
    注意:source命令与shell scripts的区别是,
    source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

    06_sh.sh

    #!/bin/bash
    expor DATA=250
    

    用source 是文件生效
    在这里插入图片描述
    使用 env可以查看到环境变量中已经有 DATA
    在这里插入图片描述
    可以在终端直接中读取:
    在这里插入图片描述
    在其他sh脚本读取:
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    注意事项:

    1、变量名只能包含英文字母下划线,不能以数字开头
    1_num=10 错误
    num_1=20 正确
    2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来
    3、双引号 单引号的区别
    双引号:可以解析变量的值
    单引号:不能解析变量的值
    在这里插入图片描述
    运行结果:
    在这里插入图片描述
    如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)

    export PATH=$PATH:/需要添加的路径
    

    5、预设变量

    shell直接提供无需定义的变量

    在这里插入图片描述

    案例:

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    脚本标量的特殊用法

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    加-e转义 才起换行作用
    在这里插入图片描述
    ()由子shell 完成
    在这里插入图片描述
    {}由当前的shell执行

    在这里插入图片描述

    6、变量的扩展

    6.1、判断变量是否存在

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

    6.2、字符串的操作

    在这里插入图片描述

    7、条件测试

    test命令:用于测试字符串、文件状态和数字
    test命令有两种格式:
    test condition 或[ condition ]
    使用方括号时,要注意在条件两边加上空格。

    7.1、文件测试

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

    7.2、字符串测试

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

    7.3、数值测试

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

    7.4、符合语句测试

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

    8、控制语句

    在这里插入图片描述

    8.1、if控制语句

    格式一:
    if [条件1]; then
        执行第一段程序
    else
        执行第二段程序
    fi
    格式二:
    if [条件1]; then
        执行第一段程序
    elif [条件2];then
    执行第二段程序
    else
        执行第三段程序
    fi
    

    案例:

    在这里插入图片描述

    案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    案例:

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    8.2、case

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

    8.3、for循环语句

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

    案例:

    在这里插入图片描述

    案例:扫描当前文件

    在这里插入图片描述

    8.4、while

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

    8.5、until

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

    8.6、break continue

    在这里插入图片描述

    9、函数

    在这里插入图片描述
    所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用
    在这里插入图片描述

    案例:求最值

    在这里插入图片描述

    案例:函数分文件

    在这里插入图片描述
    fun.sh
    在这里插入图片描述
    24_sh.sh
    在这里插入图片描述

    展开全文
  • 最近在处理一个 `Python` 局部变量的作用域问题...所以知识这个东西还是要不断“温故”,今天要总结的 `Shell` 脚本命令也是,基本属于一看就会,一写不对的状态,所以还是要把常用的操作总结到一起,方便查找和复习...

    前言

    最近在处理一个 Python 局部变量的作用域问题时发现有些奇怪,想起了之前常写的 Lua 脚本,于是想写个函数测试一下,结果发现短短的十几行代码出现了多个错误,这可是我写了近三年的代码啊,才放下半年就记不清了,所以知识这个东西还是要不断“温故”,今天要总结的 Shell 脚本命令也是,基本属于一看就会,一写不对的状态,所以还是要把常用的操作总结到一起,方便查找和复习。

    获取命令执行结果

    脚本中常常要获取一些命令的执行结果,比如当前目录 pwd、当前时间 date 等等,如果在控制台时直接输入后回车就能看到结果,但是在 Shell 脚本中却不能这样做,常见的有以下两种方式。

    使用反引号 `command `来执行命令

    反引号就是键盘上 Tab 键上方的那个按键对应的符号,常写 Markdown 的小伙伴知道这个符号就是包裹代码块的那个符号,在 Shell 脚本中被用来执行命令得到结果,举个简单的例子

    #!/bin/bash
    
    result=date
    echo $result
    
    result=`date`
    echo $result
    

    将上述命令保存到文件 cmd.sh 中运行 ./cmd.sh 得到结果:

    $ ./cmd.sh
    date
    Tue Jul 7 23:48:03 CST 2020
    

    从运行结果可以看出,如果不加反引号,我们常用的这些命令会被当成普通的字符串处理。

    使用括号组合 $(command) 来执行命令

    除了上面的反引号,使用美元符和小括号组合也可以在 Shell 脚本中运行命令,使用同样的例子测试

    #!/bin/bash
    
    result=`date`
    echo $result
    
    result=$(date)
    echo $result
    

    保存到文件 cmd.sh 中运行 ./cmd.sh 得到结果:

    $ ./cmd.sh
    Tue Jul 7 23:53:27 CST 2020
    Tue Jul 7 23:53:27 CST 2020
    

    对比可以看出两种方式在这个命令下运行结果是一样的。

    两种方式的区别

    虽然上述两种方式都可以在 Shell 脚本中得到命令运行的结果,但是有一点是不一样的,那就是反引号执行命令不支持嵌套,不能实现反引号中再出现反引号,而 $(command)的方式是支持嵌套的,关于这一点可以看下面这个例子。

    $ echo $(ls $(pwd))
    cmd.sh
    

    分析一下这个命令 echo $(ls $(pwd)),最里面的命令是 $(pwd)先执行得到当前目录,然后执行命令 $(ls 当前目录)得到目录下的文件,再通过 echo 命令把这个结果输出,就得到了 cmd.sh 这个文件名,因为我这个目录下只有这一个文件。

    系统的命令使用反引号的方式改写就不生效了。

    $ echo `ls `pwd``
    cmd.shpwd
    

    我们还是仿照上面嵌套来写,但是 echo 后面的内容其实被分成了3部分,一个ls命令,一个pwd字符串、一个空命令,这样就能解释运行结果 cmd.shpwd了。

    对照着结果我们就可以知道了, $(command)的方式更加强大,可以支持命令的嵌套,应用更广泛一点,而反引号的方式跟多出现在之前的脚本中。

    特殊变量使用

    从学习语言的第一天起就记住了变量名中只能有数字、字母、下划线,并且数字不能打头(Shell中只能字母开头),但是在 Shell 脚本中有一些特殊的变量,包含各种奇奇怪怪的符号。

    $0 $1 $2 …

    这些是运行 Shell 脚本时传递给脚本的命令行参数。命令行参数用 $n 表示,$0表示当前脚本的文件名,$1 表示第一个参数,$2 表示第二个参数,依次类推,可以类比 Windows 下的 %0%1%2

    $$

    当前 Shell 脚本的进程ID。如果在命令行执行得到的是当前 bash 的进程ID,如果放到脚本中,得到的是脚本的进程ID。

    $?

    可以获取上一个命令执行后的返回结果。

    $#

    传递给脚本的命令行参数的个数。

    $*

    传递给脚本的命令行参数的所有参数。

    $@

    传递给脚本的命令行参数的所有参数,与 $* 稍有不同。

    测试

    写个脚本测试一下,新建 cmdargs.sh 文件,编写下面代码:

    #!/bin/bash
    
    echo \$0 is $0
    echo \$1 is $1
    echo \$2 is $2
    echo \$$ is $$
    echo \$# is $#
    echo \$* is $*
    echo \$@ is $@
    
    

    先执行 ./cmdargs.sh 脚本, 然后输出 $? 脚本的退出状态,运行结果如下:

    $ ./cmdargs.sh I love my daughter
    $0 is ./cmdargs.sh
    $1 is I
    $2 is love
    $$ is 197
    $# is 4
    $* is I love my daughter
    $@ is I love my daughter
    
    $ echo $?
    0
    

    $*$@ 的区别

    对照这个源码和输出结果,这些特殊变量应该可以分清楚了,其中 $*$@ 都是把所有内容都列出来了,但它俩还是有点区别的,当这两个变量都被双引号包裹时,通过 for 循环会得到不同结果,写个脚本 cmdargs2.sh 试一下

    #!/bin/bash
    
    echo "test for \"\$*\""
    for var in "$*"
    do
        echo "$var"
    done
    
    echo "test for \"\$@\""
    for var in "$@"
    do
        echo "$var"
    done
    

    运行结果如下, "$*"把所有的参数当成了一个整体,而 "$@" 把各个参数都拆分开了,可以通过循环依次打印出来。

    $ ./cmdargs2.sh I love my daughter
    test for "$*"
    I love my daughter
    test for "$@"
    I
    love
    my
    daughter
    

    条件判断

    说起条件判断第一反应就是 if 了,在 Shell 脚本中也有 if 语句,同样是条件判断的中坚力量,先来看看 if 语句的写法:

    if 语句格式

    if [ -d $filename ]; then
       echo "this is a directory."
    elif [ -a $filename ]; then
       echo "the file is exist."
    else
       echo "the file is not exist."
    fi
    

    直接提供一个最复杂的情况,如果不需要 elif 或者 else 分支,直接删掉就可以,但是 ifthenfi 这些都是必须的,并且中括号里面的表达式与中括号之间都要有空格,如果挨着写会报错的。

    中括号 [] 的作用

    一度认为 if 条件语句就是这样写,中括号 [] 应该是语法的一部分,但是查询后发现这居然是一个命令,和 lspwd 一样是一个可以执行命令,放在 if 条件判断时基本等同于 test 命令。

    $ which [
    /usr/bin/[
    $ which test
    /usr/bin/test
    

    看着这个查询结果感觉神奇吧,此外还有一个 [[]] 双中括号的操作,这个就不是命令了,而是 Shell 的一个关键字,比 [] 要强大的多。

    具体条件

    Shell 脚本最常见的条件就是文件判断,数字判断和字符串判断了,接下来列举一下这些判断的常见写法。

    文件判断

    命令含义
    -a $filename文件存在时为真
    -d $filename文件名对应的是目录时为真
    -s $filename文件非空时为真
    -r $filename文件可读时为真
    -w $filename文件可写时为真
    -x $filename文件可执行时为真

    数字判断

    命令含义
    n1 -eq n2n1等于n2时为真
    n1 -ne n2n1不等n2时为真
    n1 -gt n2n1大于n2时为真
    n1 -lt n2n1小于n2时为真
    n1 -ge n2n1大于等于n2时为真
    n1 -le n2n1小于等于n2时为真

    字符串判断

    命令含义
    -n str1str1字符串不为空串时值为真
    -z str1str1字符串为空串时值为真
    str1 == str2str1与str2相等时为真
    str1 != str2str1与str2不等时为真
    str1 > str2按字典序str1排在str2后面时为真
    str1 < str2按字典序str1排在str2前面时为真

    数字判断特殊写法

    命令含义
    (("$n1" == "$n2"))n1等于n2时为真
    (("$n1" != "$n2"))n1不等n2时为真
    (("$n1" > "$n2"))n1大于n2时为真
    (("$n1" < "$n2"))n1小于n2时为真
    (("$n1" >= "$n2"))n1大于等于n2时为真
    (("$n1" <= "$n2"))n1小于等于n2时为真

    逻辑关系运算符

    命令含义
    -a与操作,用于[]test 操作符
    -o或操作,用于[]test 操作符
    取反操作,用于[]test 操作符 和 [[]] 关键字
    &&与操作,用于[[]] 关键字
    ||或操作,用于[[]] 关键字

    这些逻辑写法千奇百怪的,写两个例子就慢慢就慢慢理解了,比如判断一个字符串不为空,并且这个字符串指定的目录还存在就可以写成

    if [ -n "$1" -a -d "$1" ]; then
        echo $1 directory is exist
    fi
    

    使用双小括号来比较数值变量,写在双小括号中的变量前面可以不加 $ 符号,还有诸多特权等着你去发现

    num1=$1
    num2=$2
    if (( num1 > num2)); then
        echo num1 \> num2
    fi
    

    总之在学习这些条件比较的时候踩了不少坑,有很多情况都没有注意到,不过慢慢也适应了这种语法,但还是免不了会出现一个小问题,这里提供一个 Shell 语法检查的在线网站 《shellcheck》,将要检查的脚本放到页面上检测,会给出详细的错误信息,当然也有命令版本,可以自己到对应的 github 页面上下载哦~

    总结

    • Shell 脚本中获取命令的执行结果,可以通过反引号`command`,或者小括号 $(command) 的方式得到
    • Shell 脚本中有一系列 $ 开头的变量,用好他们是脚本和函数传递参数的关键
    • Shell 脚本中的条件判断对于初学者来说很头大,有许多注意的点要记住,判断形式也多种多样
    • 脚本中有单引号、双引号、反引号,简单来记就是单引号中原样输出,双引号中变量求值后输出,反引号中只能写需要执行的命令
    • 脚本中还要中括号、双中括号、小括号、双小括号等,上面都提到过,可以自己练习下,具体的细节怕是要单独总结了,放到一起太多了
    • 脚本的中的分号起到语句结束的作用,如果有换行就不需要分号了,比如 if 条件后面的 then 如果换行,那么 then 前面的分号可以省略
    • 再记住一个坑,脚本赋值等号两端不能有空格,脚本判断等号两端必须有空格

    ==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

    有些局,选择不入便立于不败之地,选择介入,即使曾身经百战,也恐难全身而退,更不要谈什么收益了~

    展开全文
  • 以Linux系统为例,linux系统里面有很多个命令,脚本可以是一个或者多个命令的集合,通过运行...shell与批处理的比较:Linux环境下有个脚本语言叫做shell,一般的,shell脚本文件以.sh结尾,.sh并没有什么实际作用...

    转载自:http://blog.csdn.net/u010317005/article/details/50890543

    为什么要用脚本语言?

    以Linux系统为例,linux系统里面有很多个命令,脚本可以是一个或者多个命令的集合,通过运行脚本,达到既定的功能或者效果。


    shell与批处理的比较:

    Linux环境下有个脚本语言叫做shell,一般的,shell脚本文件以.sh结尾,.sh并没有什么实际作用,只是用来标识这是一个shell脚本语言。

    windows环境有个脚本语言叫批处理,以.bat结尾,windows环境下的.bat有其特定作用,因为.bat的标识可通过MIME协议调用指定的应用程序来解释


    介绍完背景,就直接开始shell脚本的编写之旅。


    国际惯例:第一个程序必须是hello world!

    [plain]  view plain  copy
    1. #!/bin/bash  
    2. echo "hello world!"  

    #! 是一个特定的标记,用来告诉系统这个脚本需要用什么程序来执行

    保存为shell.sh,然后运行


    此时发现权限不够,通过ls -ls指令查看shell.sh的详细信息


    发现没有执行权限,因此要修改shell.sh的权限,可通过chmod指令修改,至少加入执行权限


    建议修改shell脚本权限的时候在shell脚本前加./,即当前目录下查找,否则会在PATH下开始查找,避免不必要的麻烦。

    运行脚本:

    [root@localhost /]# ./shell.sh 
    hello world!


    系统给定的特殊变量:

    变量名作用
    $0当前脚本的名字
    $n传递给脚本或者函数的参数,n表示第几个参数
    $#传递给脚本或函数的参数个数
    $*传递给脚本或函数的所有参数
    $@传递给脚本或者函数的所有参数
    $$当前shell脚本进程的PID
    $?函数返回值,或者上个命令的退出状态
    $BASHBASH的二进制文件问的路径
    $BASH_ENVBASH的启动文件
    $BASH_VERSINFO[n]BASH版本信息,有六个元素
    $BASH_VERSIONBASH版本号
    $EDITOR脚本所调用的默认编辑器
    $EUID当前有效的用户ID
    $FUNCNAME当前函数名
    $GROUPS当前用户所属组
    $HOME当前用户家目录
    $HOSTTYPE主机类型
    $LINENO当前行号
    $OSTYPE操作系统类型
    $PATHPATH路径
    $PPID当前shell进程的父进程ID
    $PWD当前工作目录
    $SECONDS当前脚本运行秒数
    $TMOUT不为0时,超过指定的秒将退出shell
    $UID当前用户ID

    $* 和 $@ 的区别

    $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
    但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。


    定义变量:

    字符串变量:string="value",string为变量名,value为字符串

    数字变量:num=5,其中num为变量名,5为其对应的值

    注意:

    1、定义变量时不加$,使用时要加$,用以区别字符串,变量名用{}括来是个好习惯,shell会将花括号里面的字符解释为一个整体,后面将数组的时候会体现。

    2、不要在等号两边加上空格,否则将会报错!

    测试代码:

    [cpp]  view plain  copy
    1. #! /bin/bash  
    2. string="I am shell"  
    3. num=5  
    4.   
    5. echo "a=${a},string=${string}"  
    执行结果:

    [root@localhost /]# ./shell.sh 
    a=,string=I am shell

    变量定义时等号两边加空格测试:

    [root@localhost /]# cat shell.sh 
    #! /bin/bash

    string = "I am shell"
    num = 5
    echo "a=${a},string=${string}"
    [root@localhost /]# ./shell.sh 
    ./shell.sh: line 3: string: command not found
    ./shell.sh: line 4: num: command not found
    a=,string=

    发现问题没有?定义变量时等号两边加空格会识别不出来。

    还有!错误代码会提示,而且还会自动跳过!!变量定义还默认为空!

    验证下猜想:

    [plain]  view plain  copy
    1. #! /bin/bash  
    2.   
    3. this is wrong test!  
    4. echo "a = $a"  
    执行结果:

    [root@localhost /]# cat shell.sh 
    #! /bin/bash

    this is wrong test!
    echo "a = $a"
    [root@localhost /]# ./shell.sh 
    ./shell.sh: line 3: this: command not found
    a = 

    说明猜想正确!错误代码会跳过并继续执行之后的代码(解释性语言特点)!变量默认值为空!




    测试变量的特性以及表达式赋值:

    [plain]  view plain  copy
    1. #! /bin/bash  
    2.   
    3. a=5  
    4. b=$a+5  
    5. echo "now b=$b"  
    6. b=8  
    7. echo "after:b=$b"  
    执行结果:

    [root@localhost /]# cat shell.sh 
    #! /bin/bash

    a=5
    b=$a+5
    echo "now b=$b"
    b=8
    echo "after b=$b"
    [root@localhost /]# ./shell.sh 
    now b=5+5
    after b=8

    由结果可发现,shell中变量没有类型!根据表达式自动改变其类型!还发现一个问题,表达式不能计算结果,变成了字符串的拼接!

    又有一个新问题,如何执行表达式的结果而不是字符串的拼接呢?


    三种赋值方式:

    1、赋值关键字let

    使用方法:let 变量名 = 表达式

    测试代码;

    [plain]  view plain  copy
    1. #! /bin/bash  
    2. a=5  
    3. let b=$a+5  
    4. echo "now b=$b"  
    5. let b=8*5  
    6. echo "after:b=$b"  
    执行结果:
    [root@localhost /]# cat shell.sh 
    #! /bin/bash

    a=5
    let b=$a+5
    echo "now b=$b"
    let b=8*5
    echo "after b=$b"
    [root@localhost /]# ./shell.sh 
    now b=10
    after b=40


    2、从终端(stdin)获取变量赋值:

    [plain]  view plain  copy
    1. #! /bin/bash  
    2. echo "who are you?"  
    3. read name  
    4. echo "hello, $name"  
    运行结果:

    [root@localhost /]# cat shell.sh 
    #! /bin/bash

    echo "who is you?"
    read name
    echo "hello,$name"
    [root@localhost /]# ./shell.sh 
    who is you?
    oba      【此为输入字符】
    hello,oba

    3、使用$(linux命令)来赋值

    [plain]  view plain  copy
    1. #! /bin/bash  
    2.   
    3. a=$(ls)  
    4. echo "$a"  

    执行结果:

    [root@localhost /]# ./shell.sh 
    bin
    boot
    dev
    etc
    home
    lab2.sh
    lib
    lost+found
    media
    mnt
    opt
    proc
    qt
    root
    sbin
    selinux
    Settings
    shell.sh
    srv
    sys
    tmp
    usr
    var

    部分内容参考:http://c.biancheng.net/cpp/shell/


    展开全文
  • shell脚本基本语法

    千次阅读 2018-08-24 18:06:59
    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。 到现在为止,你明白什么是shell...
  • Golang 执行 shell 脚本,不接收返回值 // 返回一个 cmd 对象 cmd := exec.Command("sh", "-c", "./scripts/curl.sh") // 如果只执行命令,不接收返回值 cmd.Run() Run(),命令其实是调用了 cmd.Star...
  • Shell脚本中的while循环

    千次阅读 2020-07-19 10:54:52
    Today we’ll learn about the while loop in shell scripts. Loops are an essential part of any programming language. When we write a code to execute a set of statements 15 times, writing the same ...
  • shell脚本安装软件
  • shell脚本中执行ssh

    万次阅读 2018-11-23 13:44:39
    在编写ssh自动登陆脚本之前,先说一下shell脚本的基础,此基础不是一些语法什么的,网上到处都是,这里总结了一下shell脚本的运行机制~ shell脚本的运行方式 首先要说一下shell的几种启动方式,正是踩了脚本...
  • Shell脚本(一)

    万次阅读 多人点赞 2018-07-30 08:44:01
    20.1 什么是Shell脚本 shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。 假如完成某个需求需要一口气输入10条命令,对于简单的命令...
  • Linux下mysql数据库备份以及恢复shell脚本
  • shell脚本开头

    千次阅读 2020-06-25 15:23:04
    开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行...在脚本里可以写shell命令,执行后会自动执行。 ...
  • shell脚本&post请求

    千次阅读 2020-12-02 21:24:19
    经常需要调用别的需求的接口,但是由于我们测试是在测试环境上的,和生产的环境还是有点区别的, 因为在伤心的时候我们需要去生产环境去验证别人的接口是否能够调的通,网络策略是否畅通,因此用到了shell脚本 ...
  • Linux系统自动不停重启并计数的shell脚本
  • 脚本调用: 先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh。...新开启子shell,需要在父shell定义环境变量的变量子shell才可以使用可以继承环境变量。在脚本中定义环境...
  • shell脚本中调用其他shell脚本有三种方法: fork:简单的执行脚本。如果有执行权限可直接执行,如果没有权限的话需要在前面加上sh。运行时会新开一个子shell执行脚本。子shell执行完成后会返回父shell继续执行。...
  • Linux shell 脚本编写

    万次阅读 多人点赞 2018-01-30 12:24:10
    博主这边主要是在Android系统编译打包时要用到这个shell脚本文件,基本上都是用的这个shell脚本,去操作系统文件导入,压缩,copy,move,makedir,权限修改等,所以我们很有必要去了解这个shell程序的编写 ...
  • 70个经典的 Shell 脚本

    万次阅读 多人点赞 2018-08-30 13:29:59
    阿里Linux Shell脚本面试25个经典问答 分享70个经典的 Shell 脚本面试题与答案     1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ? 1 2 3 4 ./show.sh ...
  • shell脚本中执行命令Shell is a command-line interpreter that allows the user to interact with the system. It is responsible for taking inputs from the user and displaying the output. Shell是一个命令行...
  • shell脚本进入指定目录

    千次阅读 2020-08-14 09:42:05
    在linux环境下,常有通过shell脚本进入指定目录的操作,例如有一段脚本 framework.sh #!/bin/bash echo "\n----------- 开始进入指定文件夹 --------------\n"; cd /Users/xxxx/Downloads/work/phapp_html pwd ls -l...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 561,170
精华内容 224,468
关键字:

shell脚本