当前位置: 首页 > news >正文

交易平台网站模板深圳市seo网络推广哪家好

交易平台网站模板,深圳市seo网络推广哪家好,揭阳市住房和城乡建设局官方网站,WordPress右侧导航菜单主题shell脚本概述 第一个shell脚本 shell注释 shell变量 shell位置参数 shell字符串 shell内置命令 shell命令替换 输出 流程控制IF export命令 退出脚本 运行Shell脚本 实例导航 shell脚本概述 在说什么是shell脚本之前,先说说什么是shell。 从程序员的…

shell脚本概述

第一个shell脚本

shell注释

shell变量

shell位置参数

shell字符串

shell内置命令

shell命令替换

输出

流程控制IF

export命令

退出脚本

运行Shell脚本

实例导航

shell脚本概述

在说什么是shell脚本之前,先说说什么是shell。

从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。

Linux的Shell种类众多,常见的有:

1) Bourne Shell(/usr/bin/sh或/bin/sh)
2) Bourne Again Shell(/bin/bash)
3) C Shell(/usr/bin/csh)
4) K Shell(/usr/bin/ksh)
5) Shell for Root(/sbin/sh)

不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种 就足够了。在本文中,我们关注的重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我们可以看到#!/bin/sh,它同样也可以改为#!/bin/bash。

那么什么是shell脚本呢?

shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

#!/bin/sh
#comments
Your commands go here

首行中的符号#!指定脚本解释器,这里是用/bin/sh做解释器的。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。

编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。执行脚本的时候,要先将脚本文件的属性改为可执行的:chmod +x filename.sh
执行脚本的方法是:./filename.sh

shell脚本中最重要的就是对shell命令的使用与组合,再使用shell脚本支持的一些语言特性,完成想要的功能。看个例子吧。

#!/bin/shcd ~mkdir shell_tutcd shell_tutfor ((i=0; i<10; i++)); dotouch test_$i.txtdone

示例解释

•第1行:指定脚本解释器,这里是用/bin/sh做解释器的

•第2行:切换到当前用户的home目录

•第3行:创建一个目录shell_tut

•第4行:切换到shell_tut目录

•第5行:循环条件,一共循环10次

•第6行:创建一个test_1…10.txt文件

•第7行:循环体结束

cd, mkdir, touch都是系统自带的程序,一般在/bin或者/usr/bin目录下。for, do, done是sh脚本语言的关键字。

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:

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

在这里插入图片描述
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。

运行 Shell 脚本有两种方法:

  1. 作为可执行程序

    将上面的代码保存为 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 告诉系统说,就在当前目录找。

  2. 作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

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

    这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

shell注释

# 开头的行就是注释,会被解释器忽略。通过每一行加一个 # 号设置多行注释,像这样:

# 这是一个注释
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束  #####

如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?
每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。

多行注释还可以使用以下格式:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

EOF 也可以使用其他符号:

:<<'
注释内容...
注释内容...
注释内容...
':<<!
注释内容...
注释内容...
注释内容...
!

shell变量

定义变量

使用变量

特殊变量

Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型。新的变量会在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进程都不能访问本地变量。这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。

  1. 定义变量

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,shell 变量也遵循这个规则

    在 bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

    这意味着,bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。

    当然,如果有必要,你也可以使用 shell declare 关键字显式定义变量的类型,但在一般情况下没有这个需求,shell 开发者在编写代码时自行注意值的类型即可

    shell 支持以下三种定义变量的方式:

    variable=value
    variable='value'
    variable="value"
    

    需要注意一下几点:

    • 变量名称和等号之间不能有空格
    • 变量名由数字、字母、下划线组成,且必须以字母或者下划线开头
    • 不能使用 shell 里的关键字

    除了显式地直接赋值,还可以用语句给变量赋值,如:

    for file in `ls /etc`
    #或
    for file in $(ls /etc)
    

    以上语句将 /etc 下目录的文件名循环出来。

  2. 使用变量

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

    your_name="qinjx"
    echo $your_name
    echo ${your_name}
    

    变量名外面的花括号是可选的,推荐给所有变量加上花括号,加花括号是为了帮助解释器识别变量的边界

    已定义的变量,可以被重新定义,如:

    your_name="tom"
    echo $your_name
    your_name="alibaba"
    echo $your_name
    

    [注]这样写是合法的,但注意,第二次赋值的时候不能写$your_name=“alibaba”,使用变量的时候才加美元符($)。

  3. 特殊变量

    变量 含义
    $0 当前脚本的文件名(包含路径)
    $n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2
    $# 传递给脚本或函数的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数以 “$1 $2 … $n” 的形式输出所有参数
    $@ 与 $* 相同,但是使用时加引号,并在引号中返回每个参数,以 “$1” “ 2 " … " 2" … " 2""n” 的形式输出所有参数
    $? 上个命令的退出状态,或函数的返回值。所谓退出状态,就是上一个命令执行后的返回结果,退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1,不过,也有一些命令返回其他值,表示不同类型的错误
    $$ 当前 shell 脚本的进程 ID
    $! 执行d 上一个后台指令的ID
    $- 显示 shell 使用的当前选项,与set命令功能相同
  4. 只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。下面的例子尝试更改只读变量,结果报错:

    #!/bin/bashmyUrl="https://www.google.com"
    readonly myUrl
    myUrl="https://www.runoob.com"
    

    [注]运行脚本,结果如下:
    /bin/sh: NAME: This variable is read only.

变量类型

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

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

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

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

④创建只可函数体中使用的局部变量:

#使用local修饰的变量在函数体外无法访问,并且local只能在函数体内使用
local name=“test” 

关于变量,还需要知道几个与其相关的Linux命令

①env用于显示用户环境区中的变量及其取值;

②set用于显示本地数据区和用户环境区中的变量及其取值;

③unset用于删除指定变量当前的取值,该值将被指定为NULL;

④export命令用于将本地数据区中的变量转移到用户环境区;

#unset用于删除指定变量当前的取值,该值将被指定为NULL
unset name; 

(3)字符串变量

①单引号

#单引号变量,只能原样输出,变量 ${变量名称}无效
#单引号中不能出现一个单独的单引号,转义也不可以
var='test' 

②双引号

#双引号变量,变量 ${变量名称}有效
#可出现转义符
var="my name is ${name}"

③拼接字符串

#中间无任何+,之类的字符
name="this is"" my name"; 
#等效
name="this is my name";
#等效
name="this" is "my name"name='this is'' my nam';
#等效
name=‘this is my name';
#等效
name='this' is 'my name'

④获取字符串长度

#创建普通变量
name=“test”;
#在${}中使用“#”获取长度,此例输出为4
echo ${#name}; 

⑤提取子字符串

#创建普通变量
name=“this is my name”;#1:4 从第2个开始 往后截取4个字符
echo ${name:1:4} #输出 is i#::4 从第一个字符开始 往后截取4个字符
echo ${name::4} #输出 this

(3)长句换行

在shell中为避免一个语句过长,可以使用“\”进行换行,在脚本执行过程中还是当做一行一个语句执行。
注意:\ 前添加一个空格 。 \ 后无空格直接换行。

/mysql/bin/mysql \
-h test_host -P 000 \
-u test_user -ptest_password ;

shell位置参数

我们来说一下 shell 位置参数是怎么回事,运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n 的形式来接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推

同样,在调用函数时也可以传递参数。shell 函数参数的传递和其它编程语言不同,没有所谓的形参和实参,在定义函数时也不用指明参数的名字和数目。换句话说,定义 shell 函数时不能带参数,但是在调用函数时却可以传递参数,这些传递进来的参数,在函数内部就也使用 $n 的形式接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推

这种通过$n的形式来接收的参数,在 shell 中称为位置参数。

#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

为脚本设置可执行权限($ chmod +x test.sh ),
并执行脚本($ ./test.sh 1 2 3),

输出结果如下所示:

Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

shell字符串

字符串拼接

  1. 字符串拼接

    在 shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接

    #!/bin/bashname="shell"
    url="http://www.baidu.com/"str1=$name$url  #中间不能有空格
    str2="$name $url"  #如果被双引号包围,那么中间可以有空格
    str3=$name": "$url  #中间可以出现别的字符串
    str4="$name: $url"  #这样写也可以
    str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号echo $str1
    echo $str2
    echo $str3
    echo $str4
    echo $str5
    

shell内置命令

bash shell 中直接可用的内建命令:

命令 作用
echo将指定字符串输出到 STDOUT
export 设置子 shell 进程可用的变量
read从 STDIN 读取一行数据并将其赋给一个变量
exit强制 shell 以指定的退出状态码退出

test 和 [] 内置命令

  1. test 和 [] 内置命令

    test 是 shell 内置命令,用来检测某个条件是否成立,test 命令也可以简写为 [] 两者是等价的,两者通常和 if 语句一起使用,它有很多选项,可以进行数值、字符串和文件三个方面的检测。两者命令的用法为:

    #用法1
    test expression#用法2
    [ expression ]
    

    需要注意 [] 和 expression 之间的空格,这两个空格是必须的,否则会导致语法错误。[] 的写法更加简洁,比 test 使用频率高

shell命令替换

shell 命令替换是指将命令的输出结果赋值给某个变量。比如,在某个目录中输入 ls 命令可查看当前目录中所有的文件,但如何将输出内容存入某个变量中呢?这就需要使用命令替换了,这也是 shell 编程中使用非常频繁的功能

shell 中有两种方式可以完成命令替换,一种是反引号 ,一种是 $() 使用方法如下:

variable=`commands`
variable=$(commands)

variable 是变量名,commands 是要执行的命令,commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号 ; 分隔

例如,date 命令用来获得当前的系统时间,使用命令替换可以将它的结果赋值给一个变量

#!/bin/bash
btime=`date`    #开始时间,使用``替换
sleep 10s       #休眠20秒
etime=$(date)   #结束时间,使用$()替换echo "begin time: $btime"
echo "end time: $etime"

原则上讲 `` 和 $() 这两种变量替换的形式是等价的,但也有各自的优缺点,如下:

• 反引号毕竟看起来像单引号,有时候会对查看代码造成困扰,而使用 $() 就相对清晰,能有效避免这种混乱

• $() 支持嵌套,反引号不支持

• $() 仅在 bash Shell 中有效,而反引号可在多种 shell 中使用,兼容性好

建议:如果我们的脚本不需要跨平台,想便于查看,或是有嵌套需求的可用 $();如果没有嵌套需求,希望脚本的平台兼容性强则可以用反引号

输出

(1)echo

描述:仅用于字符串的输出,没有使用printf作为输出的移植性好,建议使用printf

(2)printf

描述:printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。无大括号,直接以空格分隔

流程控制IF

  1. 单分支语法格式:

    #单分支语法格式
    if 条件
    thencommands
    fi
    

    也可以将 if 和 then 放同一行,注意 then 前必须加一个分号 ;

    if 条件; thencommands
    fi
    
  2. 双分支语法:

    if 条件; thencommands
    elsecommands
    fi
    
  3. 多分支语法:

    if 条件1; thencommands
    elif 条件2; thencommands
    elif 条件3; thencommands
    elsecommands
    fi
    

• 当 if 语句中使用 [ ] 条件修饰符时, $flag 变量必须加上引号
• 当 if 语句中使用 [[]] 条件修饰符时,$flag 变量的引号可有可无

export命令

什么是export命令?

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。

在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

为什么要用export命令?

为了是是我们定义一个变量时可以在子shell中被调用,而不需要重复去定义。

怎么使用export命令?

解释:
♦Linux export命令用于设置或显示环境变量。
♦在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。

语法:export [-fnp][变量名称]=[变量设置值]

* -f  代表[变量名称]中为函数名称。

* -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

* -p  列出所有的shell赋予程序的环境变量。

列出当前所有的环境变量

[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED="1"
declare -x KDE_NO_IPV6="1"
declare -x LANG="zh_CN.UTF-8"
declare -x LC_ALL="zh_CN.GBK"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/zszc/bin"
declare -x PWD="/home/zszc"
declare -x QTDIR="/usr/lib64/qt-3.3"
declare -x QTINC="/usr/lib64/qt-3.3/include"
declare -x QTLIB="/usr/lib64/qt-3.3/lib"

定义环境变量

[root@localhost ~]# export laolao#定义环境变量
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED="1"
declare -x KDE_NO_IPV6="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_CLIENT="192.168.113.206 17527 22"
declare -x SSH_CONNECTION="192.168.113.206 17527 192.168.44.33 22"
declare -x SSH_TTY="/dev/pts/1"
declare -x TERM="vt100"
declare -x USER="root"
declare -x a="echo hollo li"
declare -x b="echo hollo qiang"
declare -x c="echo huahua"
declare -x laolao
declare -x test="value1"

定义环境变量赋值

[root@localhost ~]# export laolao=2
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED="1"
declare -x KDE_NO_IPV6="1"
declare -x LANG="zh_CN.UTF-8"
declare -x LC_ALL="zh_CN.GBK"
declare -x TERM="vt100"
declare -x USER="root"
declare -x a="echo hollo li"
declare -x b="echo hollo qiang"
declare -x c="echo huahua"
declare -x laolao="2"
declare -x test="value1"
[root@localhost ~]# 

♦得出的结论是:

•1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

•2、一个shell中的系统环境变量才会被复制到子 shell中(用export定义的变量);

•3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失 (并不能返回到父shell中)。

•4、不用export定义的变量只对该shell有效,对子shell也是无效的。

实例

实例1

[root@localhost ~]# vim liqiang.sh
export a='echo hollo li'
b='echo hollo qiang'
./liqiang-3.sh
[root@localhost ~]# vim liqiang-3.sh
echo 看看这里调用几次
echo 调用一次就对了
echo $a
echo $b
bash

输出结果:

[root@localhost ~]# ./liqiang.sh
看看这里调用几次
调用一次就对了
echo hollo li

实例2:在子shell中定义变量,在父shell中调用

[root@localhost ~]# vim liqiang-3.sh
echo 看看这里调用几次
echo 调用一次就对了
echo $a
echo $b
c='echo huahua'
bash
~
root@localhost ~]# vim liqiang.sh
export a='echo hollo li'
export b='echo hollo qiang'
./liqiang-3.sh
echo $c

运行结果:

[root@localhost ~]# ./liqiang.sh
看看这里调用几次
调用一次就对了
echo hollo li
echo hollo qiang
#c没有被调用
[root@localhost ~]# 

实例3:在子shell中用export导出依然不会被父shell调用c

[root@localhost ~]# vim liqiang-3.sh
echo 看看这里调用几次
echo 调用一次就对了
echo $a
echo $b
export c='echo huahua'
bash

运行结果:

[root@localhost ~]# ./liqiang.sh
看看这里调用几次
调用一次就对了
echo hollo li
echo hollo qiang
[root@localhost ~]# 

退出脚本

退出命令:exit

在退出脚本时使用不同的错误码,这样可以根据错误码来判断发生了什么错误。

在绝大多数 shell 脚本中,exit 0 表示执行成功,exit 1 表示发生错误。
对错误与错误码进行一对一的映射,这样有助于脚本调试。

if [ `whoami` != "weblogic" ];then
echo " Please use the weblogic user to start this shell"
exit 1
fi

(1)删除目录/文件

运行Shell脚本

  1. [bash执行] 方式

    语法: sh [相对路径或绝对路径]/***.sh

  2. [直接执行脚本文本] 方式

    步骤1:

    设置文件为可执行,+x 表示文件添加可执行权限

    chmod +x 01-hello.sh

    步骤2:

    运行文件,如果文件名在当前目录,前面需要加./ 。

    ./文件名

实例导航

流程控制IF语句

test 和 [] 内置命令

exit 内置命令

  1. 流程控制IF语句

    #判断文件是否存在,存在输出 ok,不存在输出 no
    #!/bin/bash
    if ls /etc/passwd; thenecho 'ok'
    elseecho 'no'
    fi
    
  2. test 和 [] 内置命令

    # test 和 [] 示例
    #!/bin/bash
    read age
    if test $age -le 2; thenecho "婴儿"
    elif test $age -ge 3 && test $age -le 8; thenecho "幼儿"
    elif [ $age -ge 9 ] && [ $age -le 17 ]; thenecho "少年"
    elif [ $age -ge 18 ] && [ $age -le 25 ]; thenecho "成年"
    elif test $age -ge 26 && test $age -le 40; thenecho "青年"
    elif test $age -ge 41 && [ $age -le 60 ]; thenecho "中年"
    elseecho "老年"
    fi
    
  3. exit 内置命令

    #!/bin/shif [ `whoami` != "app" ];then
    echo " Please use the app user to start this shell"
    exit 1
    fi
http://www.qdjiajiao.com/news/7169.html

相关文章:

  • 免费模板网站制作怎么注册网站 个人
  • 中小微企业名录库查询seo对网店推广的作用
  • 建设部网站官工程质量手册广州优化防控措施
  • 知名网站服务器小红书如何引流推广
  • 兴县做网站的公司网络营销策划内容
  • 电子商务网站建设模板新闻稿在线
  • 网站辅助导航新冠疫苗接种最新消息
  • 网站开发软硬件廊坊快速优化排名
  • web前端开发培训机构哪家好seo设置是什么
  • 微信oa系统seo查询官方网站
  • 石材网站建设软件开发培训
  • 外贸网站建设电脑培训班一般要学多久
  • 怎么用visual studio做网站电话营销销售系统
  • 做相册的网站有哪些谷歌google play官网下载
  • 浅谈网站的主色调设计网络推广公司哪家好
  • logo一键生成器免费版下载乐天seo培训中心
  • 徐州网站开发哪个好薇外包公司是正规公司吗
  • 网站设计内容包括我想做电商怎么加入
  • wordpress+侧栏主题网站推广seo招聘
  • 跟我一起做网站品牌策划公司介绍
  • 网站报价单河南省疫情最新情况
  • 石家庄知名网站网络营销运营
  • 南京网站销售seo推广代运营
  • 上海网站建设哪家网址域名ip查询
  • 磁力链接 网站怎么做的网站seo具体怎么做
  • 哪个平台做网站好东莞专业网站推广工具
  • 云南7省建设厅网站企业网站seo案例
  • 做网站的合同全媒体广告策划营销
  • 福州专业做网站如何开发网站平台
  • .net做的网站视频号的链接在哪