交易平台网站模板深圳市seo网络推广哪家好
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 脚本有两种方法:
-
作为可执行程序
将上面的代码保存为 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 告诉系统说,就在当前目录找。
-
作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh /bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
shell注释
以 #
开头的行就是注释,会被解释器忽略。通过每一行加一个 #
号设置多行注释,像这样:
# 这是一个注释
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束 #####
如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?
每一行加个#
符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
':<<!
注释内容...
注释内容...
注释内容...
!
shell变量
定义变量
使用变量
特殊变量
Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型。新的变量会在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进程都不能访问本地变量。这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。
-
定义变量
变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,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 下目录的文件名循环出来。
-
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="qinjx" echo $your_name echo ${your_name}
变量名外面的花括号是可选的,推荐给所有变量加上花括号,加花括号是为了帮助解释器识别变量的边界
已定义的变量,可以被重新定义,如:
your_name="tom" echo $your_name your_name="alibaba" echo $your_name
[注]这样写是合法的,但注意,第二次赋值的时候不能写
$
your_name=“alibaba”,使用变量的时候才加美元符($
)。 -
特殊变量
变量 含义 $0 当前脚本的文件名(包含路径) $n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2 $# 传递给脚本或函数的参数个数 $* 以一个单字符串显示所有向脚本传递的参数以 “$1 $2 … $n” 的形式输出所有参数 $@ 与 $* 相同,但是使用时加引号,并在引号中返回每个参数,以 “$1” “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数 $? 上个命令的退出状态,或函数的返回值。所谓退出状态,就是上一个命令执行后的返回结果,退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1,不过,也有一些命令返回其他值,表示不同类型的错误 $$ 当前 shell 脚本的进程 ID $! 执行d 上一个后台指令的ID $- 显示 shell 使用的当前选项,与set命令功能相同 -
只读变量
使用 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字符串
字符串拼接
-
字符串拼接
在 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 和 [] 内置命令
-
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
-
单分支语法格式:
#单分支语法格式 if 条件 thencommands fi
也可以将 if 和 then 放同一行,注意 then 前必须加一个分号 ;
if 条件; thencommands fi
-
双分支语法:
if 条件; thencommands elsecommands fi
-
多分支语法:
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脚本
-
[bash执行] 方式
语法: sh [相对路径或绝对路径]/***.sh
-
[直接执行脚本文本] 方式
步骤1:
设置文件为可执行,+x 表示文件添加可执行权限
chmod +x 01-hello.sh
步骤2:
运行文件,如果文件名在当前目录,前面需要加./ 。
./文件名
实例导航
流程控制IF语句
test 和 [] 内置命令
exit 内置命令
-
流程控制IF语句
#判断文件是否存在,存在输出 ok,不存在输出 no #!/bin/bash if ls /etc/passwd; thenecho 'ok' elseecho 'no' fi
-
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
-
exit 内置命令
#!/bin/shif [ `whoami` != "app" ];then echo " Please use the app user to start this shell" exit 1 fi