首页 » Web前端 » PHP双括号技巧_shell 脚本编程

PHP双括号技巧_shell 脚本编程

访客 2024-12-04 0

扫一扫用手机浏览

文章目录 [+]

2)、要节制根本Linux 命令,文本的 增编削查、环境变量的配置利用。

3)、节制Linux正则表达式及三剑客: grep sed awk的基本利用

PHP双括号技巧_shell 脚本编程

4)、熟习常见的 Linux 网络做事的支配、优化、日志剖析及排错

PHP双括号技巧_shell 脚本编程
(图片来自网络侵删)

学习shell 脚本的目的在于对公事情中系统及做事等进行自动化的管理,因此如果不熟习事情中的网络做事,就会很难利用shell 编程处理这些做事;不节制网络做事等知识,就会让Shell开拓者的能力打折扣,乃至只是节制了 shell 编程的基本语法,并不能真正的学好shell编程。

什么是 Shell

Shell 是一个命令阐明器,它的浸染是阐明实行用户输入的命令及程序等,用户没输入一条命令,Shell 阐明器就会实行一天命令,从键盘输入的命令,就会立即得到实行结果的对话办法,我们称之为 交互式shell。

Shell 存在于系统之上用户之下,介于用户系统之间,用来卖力于用户和系统直接对话。

什么是 Shell 脚本

利用shell命令编写的文件可实行,我们称之为脚本。
脚本一样平常是一个可实行文件。

脚本措辞的种类Bourne Shell(/usr/bin/sh或/bin/sh)Bourne Again Shell(/bin/bash)C Shell(/usr/bin/csh)K Shell(/usr/bin/ksh)Shell for Root(/sbin/sh

把稳:查看当前系统支持的shell类型

[root@localhost ~]# cat /etc/shells/bin/sh/bin/bash/usr/bin/sh/usr/bin/bash其他类型的措辞

Php:网页程序措辞,动态脚本措辞。

Perl:perl脚本措辞功能比shell脚本措辞强大的多,2010年以前非常盛行,目前已在淘汰的边缘。

Python:Python脚本措辞近几年非常火的措辞,人工智能,web 开拓,数据剖析,运维脚本开拓等都非常好用,入门门槛低

Shell 脚本措辞的有点

Shell 脚本措辞的上风在于处理偏操作系统底层的业务,如Linux系统内部的很多运用都是利用shell脚本措辞开拓的,对付一下常规业务操作,利用shell更符合Linux运维 大略、易用、高效的三大原则。

操作系统默认shell

Centos RedHat rockylinux 默认利用shell都是Bourne Again shell(bash)

通过以下两种方法查看系统默认shell类型:

[root@ym ~]# echo $SHELL/bin/bash

[root@ym ~]# grep ^root /etc/passwdroot:x:0:0:root:/root:/bin/bashShell 脚本的创建与实行打开一个别系脚本文件,我们可以查看脚本的格式脚本的命名:脚本的拓展名.sh结尾系统加载shell初始化文件:

/etc/profile # 系统初始化shell环境配置文件/etc/profile.d/ # 目录存放系统初始化加载的sh脚本文件~/.bash_profile # 环境变量设置文件~/.bashrc # 当前登任命户的环境变量配置文件(可能不存在)Shell脚本实行:

shell脚本的实行过程

常日情形下,在实行shell脚本是,会向系统内核要求启动一个新的进程,在该进程中实行脚本命令及子进程脚本

shell 脚本常日采取一下集中办法实行 实例: bash test.sh 或 sh test.sh ./test.sh 这种办法须要test.sh有可实行权限 source test.sh 或 . test.sh 这种办法一样平常是读入脚本内容

shell脚本的第一行是指定脚本阐明器,常日为: #!/bin/bash 或 #!/bin/sh代码规范实例:

1、#! /bin/bash # : 代表注释 #!
代表特例 /bin/bash 命令阐明器的绝对路径2、 须要描述脚本的功能、作者、韶光、用法、版本的信息# Name:脚本的名字# Desc:功能描述 Describe# Path:存放路径# Usage:脚本的利用方法# Update:更新韶光# Author: 作者# Relase:版本
什么是Shell变量1)、什么是变量

大略来说变量便是用一个固定的字符串代替更多的的内容,变量是一个可变革的量一个不固定的量

2)、变量的命名规则

变量名的命名须遵照如下规则:

命名只能利用英笔墨母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以利用下划线(_)。
不能利用标点符号。
不能利用bash里的关键字(可用help命令查看保留关键字)。
3)、变量的类型

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

局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序须要环境变量来担保其正常运行。
必要的时候shell脚本也可以定义环境变量。
shell变量 shell变量是由shell程序设置的分外变量。
shell变量中有一部分是环境变量,有一部分是局部变量,这些变量担保了shell的正常运行4)、变量的浸染域(浸染范围)局部变量只针对付当前shell 生效全局变量只针对付全体操作系统生效5)、查看系统的环境变量set 输出所有变量,包括全局变量、局部变量env 只显示全局变量declare 输出所有变量,犹如 setexport 只显示和设置环境变量系统中已经存在一些环境变量如:HOME PATH SHELL UID USER MAIL 等,在用户登录之前就已经备/bin/longin 程序设置好。
6)、自定义环境变量

首先按照变量的命名规则利用指定字符,写在等号的左边作为变量的名称(标记),在写一个字符作为值赋值给变量名。

[root@ym ~]# ym_123=hello # 定义一个变量名称叫 ym_123[root@ym ~]# echo $ym_123 # 利用echo 输出变量所对应的值hello单引号:调用变量事不管里面有什么都要原样输出,但引号的内容;双引号:调用变量时可以调用变量所赋的值,显示变量的内容呢;反引号:可以调用命令并把命令所输出的结果复制给变量;无引号:可以复制一个连续的字母或数字给变量,中间不能有空格;export variname=valuedeclare [-aixr] variable 参数: -a :将后面名为 variable 的变量定义成为数组 (array) 类型 -i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型 -x :用法与 export 一样,便是将后面的 variable 变成环境变量; -r :将变量设定成为 readonly 类型,该变量不可被变动内容,也不能 unset7)、环境变量的配置用户环境变量配置 .bashrc .bash_profile全局环境变量配置 /etc/profile /etc/bashrc /etc/profile.d/

[root@ym ~]# echo $PATH # 查看当前系统的环境变量/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@ym ~]# export PATH=$PATH:/usr/local/bin # 添加路径到系统的环境变量中(临时设置系统环境变量,重启操作系统丢失,须要写在配置文件中)Shell 中分外的变量

变量

描述

$0

当前脚本的文件名

$n

通报给脚本或函数的参数

$#

通报给脚本或函数的参数个数

$

通报给脚本或函数的所有参数

$@

通报给脚本或函数的所有参数。
被双引号(" ")包含时,与 $ 稍有不同,下面将会讲到。

$?

上个命令的退出状态,或函数的返回值

$$

当前Shell进程ID。
对付 Shell 脚本,便是这些脚本所在的进程ID

set -- " I an hostname"echo $# # 参数个数#测试 $ $@ 不带引号[root@localhost ~]# echo $2handsone[root@localhost ~]# echo $i am handsone tdlinux[root@localhost ~]# echo $@i am handsone tdlinux[root@localhost ~]# for i in $;do echo $i;doneiamhandsonetdlinux[root@localhost ~]# for i in $@;do echo $i;doneiamhandsonetdlinux#测试 $ $@ 带双引号[root@localhost ~]# for i in "$";do echo $i;donei am handsone tdlinux#"$@":把变量分割成:$1,$2,$3[root@localhost ~]# for i in "$@";do echo $i;donei amhandsonetdlinux

实例:$_ 和 himBH

$- 记录的是当前配置打开的shell选项, 而 himBH 是默认值

himBH 每个字母代表着一个shell选项,详细如下:

h - hashall # bash 的 hash 功能,可以实现让某些 command 和 详细路径 绑定在一起。
i - interactive-comments# 配置在交互 shell 模式下,是否许可注释。
m - monitor # 配置是否打开掌握 Job control 功能。
B - braceexpand # 关于括号利用的flag,打开后可以快捷地实现某些效果H- history #是否允許用 “感叹号 !
+ history number ” 来实行历史命令

可以通过 set -o 查看来确认打开状态

hash 哈希命令参数:

-l 显示哈希表示所有的项目

-r 打消哈希表所有项

-d <名称> 删除哈希表个中的一项

-p <路径> 向哈希表中增加一项内容,添加后就可以利用了

-t <命令> 显示hash表中命令的完全路径,如果没有就会报not found缺点

实例:hash

[root@ym ~]# bash # 进入一个全新的 shell[root@ym ~]# hashhash: hash table empty # 由于是新建 shell,以是hash表为空,符合预期[root@ym ~]# ls -l[root@ym ~]# hashhits command 1 /usr/bin/ls[root@ym ~]# top[root@ym ~]# hashhits command 1 /usr/bin/ls 1 /usr/bin/top[root@ym ~]# uptime 17:56:40 up 1138 days, 7 min, 1 user, load average: 0.47, 0.36, 0.28[root@ym ~]# hash # 可以看到hash表在不断更新hits command 1 /usr/bin/uptime 1 /usr/bin/ls 1 /usr/bin/top[root@ym ~]# hash -lbuiltin hash -p /usr/bin/uptime uptimebuiltin hash -p /usr/bin/ls lsbuiltin hash -p /usr/bin/top top[root@ym ~]# hash -p /tmp/mydate date # 手动添加hash表[root@ym ~]# hash -lbuiltin hash -p /usr/bin/uptime uptimebuiltin hash -p /tmp/mydate date # 添加成功builtin hash -p /usr/bin/ls lsbuiltin hash -p /usr/bin/top top[root@ym ~]# datebash: /tmp/mydate: No such file or directory # 由于手动添加的hash表指向实行文件不存在,以是报错,这解释新增的hash表确实在work[root@ym ~]# hash -d date # 手动清楚刚加的hash表,利用 -r 则全部打消[root@ym ~]# hash -lbuiltin hash -p /usr/bin/uptime uptimebuiltin hash -p /usr/bin/ls lsbuiltin hash -p /usr/bin/top top[root@ym ~]# date # 规复Sun Jan 19 18:02:45 CST 2022i 可以在交互shell 中利用 # 号注释m 任务掌握:

Ctrl + z 后台运行

fg 命令将后台任务规复到前台

B 可以利用 {} 来实行命令history 历史命令:

!! : 返回并实行最近的一个历史命令 !n : 返回并实行第 n 个历史命令

8)、bash shell 内置变量命令

bash shell 包含一些内置命令。
常用的内部命令有:echo、eval、exec、export、read、shift。
下面先容一些详细的用法

8.1)、echo args 可以利用字符和变量的组合

echo 常用的参数列表

参数

解释

-n

不换行输出

-e

阐明转移字符

\n

换行输出

\r

回车

\t

制表符

\b

退格删除前一个字符

\v

纵向制表符

-E

不解析转义字符

\a

发出警告的凤鸣声

8.2)、eval args:当shell 程序实行到eval语句时,shell 读入参数args,并将它们组合成新的可实行命令

[root@ym test]# cat test.sh#!/bin/shecho $0echo \$$#eval "echo \$$#"[root@ym test]# sh test.sh a b ctest.sh$3c

8.3)、exec cmd : exec 命令能够在不创建子shell进程的条件下,在当前shell中实行命令。

#!/bin/shseq 1 5 > /tmp/test.logexec < /tmp/test.logcat /tmp/test.logwhile read linedo echo $linedoneecho "ok"# 实行结果[root@ym test]# sh 1test.sh12345ok# 实例2:[root@ym test]# cat 2test.sh#!/bin/shwhile read linedo echo "##########打印标准输入的内容##########" echo "输出读到的一行内容:$line" echo "##########重新开始读取标准输入内容####" sleep 1done[root@ym test]# sh 2test.shhello shell##########打印标准输入的内容##########输出读到的一行内容:hello shell##########重新开始读取标准输入内容####hello world##########打印标准输入的内容##########输出读到的一行内容:hello world##########重新开始读取标准输入内容####hello python##########打印标准输入的内容##########输出读到的一行内容:hello python##########重新开始读取标准输入内容####

8.4)、read :从标准输入读取字符信息,传给shell程序内部定义的变量

[root@ym ~]# read -p "Plase input your name:" namePlase input your name:root[root@ym ~]# echo $nameroot

8.5)、shift :shift语句会改变位置参数,即 $1 $2 $3 会变成 $2 $3, 重新排序参数位置。

[root@ym test]# cat test.sh#!/bin/shecho $# # 获取传入的参数个数shift echo $ # 输出传输的所有参数# 实行结果[root@ym test]# sh test.sh -c python2python

8.6)、exit :退出shell程序,可以在 exit 后面指定一个数字作为状态码 1 - 255 范围

#! /bin/bashif [ $# -ne 1 ] #如果传入参数个数即是1,则正常退出;否则非正常退出。
thenecho "args no!"exit 123elseecho "args ok!"exit 0fi[root@ym ~]# sh test.shargs no![root@ym ~]# echo $?123
shell ( ) (( )) [ ] [[ ]] 用法小括号()命令组。
括号中的命令将会新开一个子shell顺序实行,以是括号中的变量不能够被脚本余下的部分利用。
括号中多个命令之间用分号隔开,末了一个命令可以没有分号,各命令和括号之间不必有空格。
命令更换。
等同于cmd,shell扫描一遍命令行,创造了$(cmd)构造,便将$(cmd)中的cmd实行一次,得到其标准输出,再将此输出放到原来命令。
用于初始化数组。
如∶array=(a b c d)双小括号 (())整数扩展。
这种扩展打算是整数型的打算,不支持浮点型。
只要括号中的运算符、表达式符合C措辞运算规则.都可用在$((exp))中,乃至是三目运算符。
纯挚用(())也可重定义变量值,比如 a=5;((a++)) 可将 $a 重定义为6常用于算术运算比较,双括号中的变量可以不该用$符号前缀。
括号内支持多个表达式用逗号分开。
for((i=0;i<5;i++))单中括号 [ ] 、 双中括号 [[ ]]test <条件表达式> 等价于 [ <条件表达式> ] 语法构造[[ ]] 是拓展的 test 条件测试,可以利用 通配符等进行模式匹配,这是差异于其他几种的语法格式&&、||、>、< 等操作符可以利用与 双中括号[[ ]],不能用于单中括号[ ],在 [ ] 中一样平常利用 -a -o -gt lt更换运算符

变量

描述

${var:-word}

如果var存在且非null,返回它的值;否则返回word

${var:=word}

如果var存在且非null,返回它的值;否则将word赋值给var,并返回var的值

${var:?word}

如果var存在且非null,返回它的值;否则显示var:?word

${var:+word}

如果var存在且非null,返回word;否则返回null

模式匹配

模式

描述

${variable#pattern}

如果模式匹配于变量的开头处,则删除匹配的最短部分,并返回剩下的部分

${variable##pattern}

如果模式匹配于变量的开头处,则删除匹配的最长部分,并返回剩下的部分

${variable%pattern}

如果模式匹配于变量的结尾处,则删除匹配的最短部分,并返回剩下的部分

${variable%%pattern}

如果模式匹配于变量的结尾处,则删除匹配的最长部分,并返回剩下的部分

把稳:模式匹配处理字符串截取操作

这四种模式中都不会改变 variable 的值,个中,只有在 pattern 中利用了 匹配符号时,%和%%,# 和 ## 才有差异构造中的 pattern 支持通配符如下::表示零个或多个任意字符?:表示仅与一个任意字符匹配[...]:表示匹配中括号里面的字符[!...]: 表示不匹配中括号里面的字符

实例:${variable#pattern}

[root@ym ~]# var="/usr/share/doc/mysql-common/COPYING.Google"[root@ym ~]# echo ${var#/n/}COPYING.Google

实例:${variable##pattern}

[root@ym ~]# var="/usr/share/doc/mysql-common/COPYING.Google"[root@ym ~]# echo $var/usr/share/doc/mysql-common/COPYING.Google[root@ym ~]# echo ${var##//}COPYING.Google

实例:${variable%pattern}

[root@ym ~]# var="/usr/share/doc/mysql-common/COPYING.Google"[root@ym ~]# echo ${var%/sh}/usr

实例:${variable%%pattern}

[root@ym ~]# var="/usr/share/doc/mysql-common/COPYING.Google"[root@ym ~]# echo ${var%%s}/u

字符串操作:

[root@ym ~]# echo ${var%se} 从最右边删除最短匹配testca[root@ym ~]# echo $vartestcase[root@ym ~]# echo ${var%%se} 从最右边删除最长匹配te[root@ym ~]# echo $var 变量没有改变testcase[root@ym ~]# echo ${var#?e} 从最左边删除最短匹配stcase[root@ym ~]# echo $vartestcase[root@ym ~]# echo ${var#e} 从最左边删除最短匹配stcase[root@ym ~]# echo $vartestcase[root@ym ~]# echo ${var##e} 从最左边删除最长匹配,即删除所有[root@ym ~]# echo $vartestcase[root@ym ~]# echo ${var##s} 从最左边删除最长匹配e[root@ym ~]# echo $vartestcase[root@ym ~]# echo ${var#test} 删除testcase[root@ym ~]# echo $vartestcase[root@ym ~]# echo ${var#tests} 没有匹配testcaseShell 基本运算符算术运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

算数

解释

实例

+

加法

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 为 10,变量 b 为 20:

运算符

解释

实例

-eq

检测两个数是否相等,相等返回 true。

[ $a -eq $b ] 返回 false。

-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。

布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符

解释

实例

!

非运算,表达式为 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。

逻辑运算符

以下先容 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

运算符

解释

实例

&&

逻辑的 AND

[[ $a -lt 100 && $b -gt 100 ]] 返回 false

||

逻辑的 OR

[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

运算符

解释

实例

=

检测两个字符串是否相等,相等返回 true。

[ $a = $b ] 返回 false。

!=

检测两个字符串是否相等,不相等返回 true。

[ $a != $b ] 返回 true。

-z

检测字符串长度是否为0,为0返回 true。

[ -z $a ] 返回 false。

-n

检测字符串长度是否为0,不为0返回 true。

[ -n "$a" ] 返回 true。

$

检测字符串是否为空,不为空返回 true。

[ $a ] 返回 true。

文件测试运算符

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

属性检测描述如下:

操作符

解释

实例

-b file

检测文件是否是块设备文件,如果是,则返回 true。

[ -b $file ] 返回 false。

-c file

检测文件是否是字符设备文件,如果是,则返回 true。

[ -c $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。

-L file

检测文件是否存在且是一个 链接文件,如果是,则返回true。

[ -L $file ] 返回 true。

-S file

检测文件是否存在且是一个socket文件,如果是,则返回true。

[ -S $file ] 返回 true。

file1 -nt file2

检测file1 是否比file2新,如果是,则返回true

[ file1 -nt file2 ]返回 true。

file1 -ot file2

检测file1 是否比file2 旧,如果是,则返回true

[ file1 -nt file2 ]返回 true。

file1 -ef file 2

检测file1 是否和file2 是同一个文件,如果是,则返回true

[ file1 -nt file2 ]返回 true。

Shell 流掌握if else语句1)、单分支条件判断

#第一种语法:if <条件表达式>thencommand 指令fi#第二种语法:if <条件表达式>;thencommand 指令fi2)、双分支条件判断

if <条件表达式>thencommand 1elsecommand 2fi3)、多分支条件判断

if <条件表达式>thencommand1elif <条件表达式>thencommand2elif <条件表达式>thencommand3elescommand4fi4)、条件判断嵌套语法

#1、 test 条件表达式 if test 表达式thencommandfi#2、 []条件表达式if [字符集或算术表达式]thencommandfi#3、 [[]] 条件表达式if [[条件表达式]]thencommandfi#4、 (())条件表达式if((算术表达式))thencommandfi#5、 if 命令thencommandfi5)、利用脚本发送电子邮件

通过Linux做事器客户端发送邮件及配置须要修正:vim /etc/mail.rcset from=1350115xxx@163.com smtp=smtp.163.comset smtp-auth-user=13501157xxx@163.com smtp-auth-password=1qaz2wc smtp-auth=login把稳:如果是163邮箱,须要设置邮箱的一个授权码,将授权吗写入smtp-auth-password,否则发送不了邮件邮件测试echo "this is a test" | mail -s "标题" 13501157xxx@163.comfor 有限循环for训话语法格式:

#for 变量 in 要授予的值#do # command1-N#donefor 循环获取变量值

#for i in 1 2 3 4 5#for i in I don"'"t know if this"'"ll work#for i in `ls /tmp`#for i in `cat file`#IFS=$':'(指定分隔符)#for i in `head -1 /etc/passwd`#do# echo "word:$i"#donefor 循环 c 措辞的写法#for (( i=0; i<10; i++))# do# echo $i#done#for (( a=0,b=9;a<10,b>=0;a=a+2,b=b-2 ))#do# echo $a $b#donefor 循环获取变量办法#for i in /tmp/#for i in `ls /tmp` do # if [ -f /tmp/$i ] # then # echo "$i is file" # else # echo "$i is folder" # fi#donefor 循环练习

# 利用循环打算1到100之间的和sum=0for ((i=0;i<=100;i++))do #let sum+=$i #((sum+=$i)) #sum=$[ $sum + $i ] #sum=$(expr $sum + $i )doneecho $sumwhile 循环语法格式

# 语法格式:#while [ 条件 ] 条件为真#do# command#done# while 常用的方法#while [ 1 -eq 1 ]#while true#while :#until false#until :#do# date +%S# sleep 1#done while 嵌套if条件判断

#while :# do# A=`date +%S`# if [ $A -gt 55 ]# then# exit# fi# echo $A# sleep 1#donewhile 嵌套for循环

#while :# do# A=`date +%S`# for i in `seq 10 -1 1`# do# expr $A + $i# sleep 1# done#sleep 1#done循环自增变量循环自增变量i=expr $i + 1;let i+=1;((i++));i=$[$i+1];i=$(( $i + 1 ))实例

#!/bin/bashi=0;while [ $i -lt 4 ];do echo $i; i=`expr $i + 1`; # let i+=1; # ((i++)); # i=$[$i+1]; # i=$(( $i + 1 ))doneuntil 循环(条件不成立循环)until 循环实行一系列命令直至条件为 true 时停滞。
until 循环与 while 循环在处理办法上刚好相反。
一样平常 while 循环优于 until 循环,但在某些时候—也只是极少数情形下,until 循环更加有用。
until 语法格式

until conditiondo commanddonebreak 命令不实行当前循环体内break下面的语句从当前循环退出.continue 命令是程序在本循体内忽略下面的语句,从循环头开始实行

实例:

for i in `seq 1 10` do if [ $i -eq 5 ] then# break continue fi echo $idonecase语句case语句的语法格式:

case $VARAIBLE in PAT1)分支1;;PAT2)分支2;;...)分支n;;esac

把稳: case支持glob风格的通配符: :任意长度的任意字符; ?:任意单个字符; []:范围内任意单个字符; a|b:a或b;

显示一个脚本做事菜单

cpu) display cpu informationmem) display memory informationdisk) display disks informationquit) quit哀求:(1) 提示用户给出自己的选择; (2) 精确的选择则给出相应的信息;否则,则提示重新选择精确的选项; #!/bin/bash#cat << EOFcpu) display cpu informationmem) display memory infomationdisk) display disks informationquit) quit===============================EOFread -p "Enter your option: " optionwhile [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ]; doecho "cpu, mem, disk, quit"read -p "Enter your option again: " optiondoneif [ "$option" == "cpu" ]; thenlscpuelif [ "$option" == "mem" ]; thenfree -melif [ "$option" == "disk" ]; thenfdisk -l /dev/[hs]d[a-z]elseecho "quit"exit 0fiArray数组什么是数组arrayshell数组便是一个元素的凑集,它有限个数的元素(变量和字符内容),用一个名字来命名,用下标进行区分,这个名字就称为数组名,组成数组的变量称之为数组元素利用数组可以缩短和简化程序开拓array数组的定义数组的定义 及 增编削查

第一种方法:

array=(value1 value2 value3......)

第二种方法:

array=([1]=one [2]=two [3]=three) # 通过指定下标的办法定义数组

array=(1 2 3)# 查询数组所有元素echo ${array[]}# 显示数组的第一个元素echo ${array[1]}# 动态获取数组array=($(command))# 打印数组的所有元素echo ${array[|@]} # 获取数组的元素个数echo ${#array[|@]}#数组的赋值array[3]=four# 数组的删除unset array[1]# 数组内容的截取和更换array=(1 2 3)echo ${array[@]:1:3}echo ${array[@]/1/b}select 循环菜单select也是循环的一种,它比较适宜用在用户选择的情形下。
select 语法格式

select 变量名 [in 菜单取值列表]do 命令集done

#!/bin/bash fruits=( "add" "del" "select" "watermelon") PS3="please select a num from menu:" # 命令提示符echo "Please guess which fruit I like :"select var in ${fruits[@]} # ${fruits} 获取数组值do if [ $var = "add" ]; then echo "Congratulations, you are my good firend!" break else echo "Try again!" fidoneFunction 函数函数的定义Shell 函数的实质是一段可以重复利用的脚本代码,这段代码被提前编写好了,放在了指定的位置,利用时直接调取即可。

Shell 函数定义的语法格式如下:

function name() { statements [return value]}

对各个部分的解释:

function是 Shell 中的关键字,专门用来定义函数;name是函数名;statements是函数要实行的代码,也便是一组语句;return value表示函数的返回值,个中 return 是 Shell 关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。

由{ }包围的部分称为函数体,调用一个函数,实际上便是实行函数体中的代码。

name() { statements [return value]}函数调用

调用 Shell 函数时可以给它通报参数,也可以不通报。
如果不通报参数,直接给出函数名字即可:

name

如果通报参数,那么多个参数之间以空格分隔:

name param1 param2 param3

不管是哪种形式,函数名字后面都不须要带括号。

和其它编程措辞不同的是,Shell 函数在定义时不能指明参数,但是在调用时却可以通报参数,并且给它通报什么参数它就吸收什么参数。

Shell 也不限定订义和调用的顺序,你可以将定义放在调用的前面,也可以反过来,将定义放在调用的后面。

函数的返回值 return函数的实行结果返回值:

(1) 利用echo或printf命令进行输出; (2) 函数体中调用的命令的实行结果; 函数的退出状态码 1 - 255: (1) 默认取决于函数体中实行的末了一条命令的退出状态码; (2) 自定义:return

实例:添加10个用户,添加用户的功能利用函数实现,用户名作为参数通报给函数;

#!/bin/bash# 5: user existsaddusers() {if id $1 &> /dev/null; thenreturn 5elseuseradd $1retval=$?return $retvalfi}for i in {1..10}; doaddusers ${1}${i}retval=$?if [ $retval -eq 0 ]; thenecho "Add user ${1}${i} finished."elif [ $retval -eq 5 ]; thenecho "user ${1}${i} exists."elseecho "Unkown Error."fidone

标签:

相关文章

介绍百度码,技术革新背后的智慧之光

随着科技的飞速发展,互联网技术已经成为我们生活中不可或缺的一部分。而在这个信息爆炸的时代,如何快速、准确地获取信息,成为了人们关注...

Web前端 2025-01-03 阅读1 评论0

介绍皮箱密码,开启神秘之门的钥匙

皮箱,作为日常生活中常见的收纳工具,承载着我们的珍贵物品。面对紧闭的皮箱,许多人却束手无策。如何才能轻松打开皮箱呢?本文将为您揭秘...

Web前端 2025-01-03 阅读0 评论0

介绍盗号器,网络安全的隐忧与应对步骤

随着互联网的快速发展,网络安全问题日益突出。盗号器作为一种非法工具,对网民的个人信息安全构成了严重威胁。本文将深入剖析盗号器的原理...

Web前端 2025-01-03 阅读1 评论0