重生之囚兄全文阅读,百度云,急急急!求/免费的

《Linux命令行与shell脚本编程大全》使用其他shell
《命令行与shell脚本大全》使用其他shell
什么是dash shell
Debian的dash shell是ash shell的直系后代,ash shell是Unix上原来地Bourne shell的简化版本。
NetBSD Unix操作系统移植了ash shell,并且作为默认shell。NetBSD开发人员给ash shell添加了一些新功能,使它更接近Bourne shell。新功能包括:emacs和vi编辑器命令进行命令行编辑,以及历史命令来查看前面输入的命令。ash shell这个版本也被FreeBSD作为默认 登录shell
Debian Linux发行版创建了它自己的ash shell版本(称作Debian ash或dash)。
在很多基于Debain的Linux上默认shell并不是dash shell,而是bash shell。
Ubuntu Linux发行版将bash shell作为登录shell,将dash shell用做默认的/bin/sh shell。
大多数Linux发行版上,/bin/sh文件是链接到/bin/bash shell程序的一个符号链接。
dash shell的特性
dash命令行参数
dash命令行参数
-a 导出分配给shell的所有变量
-c 从特定命令字符串读取命令
-e 如果是非交互式shell的话,在有未经测试的命令失败时立即退出
-f 显示路径名通配符
-n 如果是非交互式shell的话,读取命令但不执行它们
-u 在尝试展开一个未设置的变量时,将错误消息写出到STDERR
-v 在读取输入时将输入写出到STDERR
-x 在执行命令时将每个命令写出到STDERR
-I 在交互式模式下,忽略输入中的EOF字符
-i 强制shell运行在交互式模式下
-m 打开作业控制(在交互式模式下默认开启)
-s 从STDIN读取命令(在没有指定文件参数时的默认行为)
-E 打开emacs命令行编辑器
-V 打开vi命令行编辑器
dash环境变量
CDPATH cd命令的搜索路径
HISTSIZE 历史记录文件中保存的行数
HOME 用户的默认登录目录
IFS 输入字段分隔符。默认值是空格、制表符和换行符
MAIL 用户收件箱文件的名称
MAILCHECK 在收件箱文件中检查新邮件的频率
MAILPATH 冒号分割的多个收件箱文件名称。设置了的话,这个值会覆盖MAIL环境变量
OLDPWD 上一个工作目录的值
PATH 可执行文件的默认查找路径
PPID 当前shell的父进程的进程ID
PS1 shell的主命令行交互提示符
PS2 shell的次命令行交互提示符
PS4 当设置了执行追踪时,在每行前面打印的一个字符
PWD 当前工作目录
TERM shell的默认终端设置
dash用set命令显示环境变量
$0:shell的名称
$n:第n个位置的参数
$*:含有所有参数内容的单个值,由IFS环境变量中的第一个字符分隔;没定义IFS的话由空格分隔
$@:将所有的命令行参数展开为多个参数
$#:位置参数的总数
$?:最近一个命令的退出状态码
$-:当前选项标记
$$:当前shell的进程ID(PID)
$!:最近一个后台命令的进程ID(PID)
用户自定义的环境变量
同bash规则完全一致
注意:dash的变量不支持可变数组!
dash内建命令
dash shell内建命令
alias 创建代表文本字符串的别名字符串
bg 以后台模式继续指定的作业
cd 切换到指定目录
echo 显示文本字符串和环境变量
eval 将所有参数用空格连起来(重新解析并执行这条命令)
exec 用指定命令代替shell进程
exit 终止shell进程
export 导出指定的环境变量,供子shell使用
fc 列出、编辑或重新执行之前在命令行中输入的命令
fg 以前台模式继续指定的作业
getopts 从一列参数中提取选项和参数
hash 维护并提取最近执行的命令和他们的位置的哈希表
pwd 显示当前工作目录的值
read 从STDIN读取一行并将其赋给一个变量
readonly 从STDIn读取一行并赋给一个不能修改的变量
printf 用格式化过的字符串显示文本和变量
set 列出或设置选项标记和环境变量
shift 按指定的次数移动位置参数
test 测试一个表达式,成立返回0,否则返回1
times 显示当前shell和所有shell进程的累计用户和系统时间
trap 在shell收到某个指定的信号时解析并执行命令
type 解释指定的名称并显示解析结果(别名、内建、命令或关键字)
ulimit 查询或设置进程限制
umask 设置默认文件值和目录权限
unalias 删除指定的别名
unset 从导出的变量中删除指定的变量或选项标记
wait 等待指定的命令完成然后返回退出
dash shell内建命令没有操作历史记录或目录栈的命令
dash脚本编程
创建dash脚本
同bash一样,在第一行加上#!/bin/dash 就可以了。
不能使用的功能
bash shell有些功能没法在dash shell中使用,这些通常称作bash主义(bashism)。
1.使用算数运算
bash中支持下面3种方式:
使用expr命令:expr operation
使用方括号:$[ operation ]
使用双圆括号:$(( operation ))
dash只支持expr命令和双圆括号,不支持方括号!
2.test命令
bash shell的test命令允许使用双等号&==&来测试两个字符串是否相等
dash shell的test命令只能识别&=&来比较字符串
3.echo语句选项
dash shell的echo能自动识别特殊字符,所以也没有-e选项,如果使用-e,echo会将它视为普通文本
可以用printf显示文本,printf在dash shell和bash shell中行为完全一致。
4.function命令
dash shell不支持使用function命令创建函数,必须使用函数名+圆括号的方式
zsh shell一些独特的功能:
改进的shell选项处理
shell兼容性模式
可加载模块
zsh shell的组成
zsh shell命令行参数
-c 只执行指定的命令,然后退出
-i 做为交互式shell启动,会提供一个命令行交互提示符
-s 强制shell从STDIN读取命令
-o 指定命令行选项
-o允许设置shell选项来配置shell的功能
选项可以分成以下几大类:
更改目录:控制cd和dirs命令如何处理目录更改的选项
补全:控制命令补全功能的选项
扩展和扩展匹配:控制命令中文件扩展的选项
历史记录:控制命令历史记录的选项
初始化:控制shell在启动时如何处理变量和启动文件的选项
输入输出:控制命令处理的选项
作业控制:控制shell如何处理作业和启动作业的选项
提示:控制shell如何处理命令行提示符的选项
脚本和函数:控制shell如何处理shell脚本和定义函数的选项
shell模拟:允许设置zsh shell来模拟其他类型shell行为的选项
shell状态:定义启动哪种shell的选项
zle:控制zsh行编辑器功能的选项
选项别名:可以用做其他选项别名的特殊选项
1.shell状态选项
有6种不同的zsh shell选项来定义shell启动的类型
交互模式(-i,interactive):提供了命令行界面提示符来输入内建命令和程序名
登录模式(-l,login):默认的zsh shell类型,处理zsh shell的启动文件并提供命令行界面提示符
特权模式(-p,privileged):有效的用户ID(EUID)跟实际用户ID不一致(用户成为了root用户)时的默认类型。它会禁止用户启动文件。
限制模式(-r,restricted):在shell中将用户限定在特定目录结构中
shin_stdin模式(-s):从STDIN读取命令
single_command模式(-t):执行一条从STDIN读取的命令,然后退出。
shell状态定义了shell是否在启动时提供命令行界面提示符,以及用户在shell中有什么访问权限
2.shell模拟选项
bsd_echo:让echo语句跟C shell的echo命令兼容
csh_junkie_history:用不带指定的history命令来引用前面的命令
csh_junkie_loops:允许while和for循环使用类似于C shell的end,而不是do和done
csh_junkie_quotes:修改使用单引号和双引号的规则来跟C shell保持一致
csh_nullcmd:在执行没有命令的重定向时,不使用NULLCMD和READNULLCMD变量的值
ksh_array:使用Korn风格的数组,采用从0开始的数字索引值,并在引用数组元素时使用方括号
ksh_autoload:模拟Korn shell的自动加载函数功能
ksh_option_print:模拟Korn shell打印选项的方法
ksh_typeset:替换处理typeset命令参数的方式
posix_builtins:使用builtin命令来执行内建命令
sh_file_expansion:在执行其他展开之前先进行文件名展开
sh_nullcmd:在进行重定向时不使用NULLCMD和READNULLCMD变量
sh_option_letters:用类似于Korn shell的方式解释单字母命令行选项
sh_word_split:在未加引号的参数展开中执行字段分隔
traps_async:在等待程序退出时,处理信号并立即运行捕捉
3.初始化选项
all_export:所有的参数和变量会自动导出到子shell进程中
global_export:导出环境中的参数不会在函数中本地化
global_rcs:如果没有设置,zsh shell不会运行全局启动文件,但仍然会运行本地启动文件
rcs:如果没有设置,zsh shell会运行/etc/zshenv启动文件,但不会运行其他文件
初始化选项允许指定在shell环境中运行哪些zsh shell启动文件(如果有的话)。也可以在启动文件中设置这些值来限定shell执行哪些选项
4.脚本和函数选项
c_bases:用C格式(0xdddd)显示十六进制数而不是用shell格式(16#dddd)
err_exit:如果命令以非零退出状态码退出,执行ZERR捕捉中的命令并退出
err_return:如果命令以非零退出状态码退出,立即从其所在函数返回
eval_lineno:如果设置了,用eval内建命令评估的表达式的行号会和shell环境中的其余部分分开记录
exec:执行命令。如果未设置这个选项,会读取命令并报告错误,但不会执行命令
function_argzero:将$0设置成函数名或脚本名
local_options:设置了的话,当shell函数返回时,恢复所有在该函数之前设置的选项
local_traps:设置了的话,当在函数内设置了信号捕捉,函数退出时恢复前一个捕捉的状态
multios:在尝试执行多个重定向时,执行隐式tee或cat命令
octal_zeros:将任何以0开头的整数字符串都解释成八进制数
typeset_silent:未设置的话,使用typeset和参数名来显示参数的当前值
verbose:在shell读取输入行时显示它们
xtrace:在shell执行命令时显示命令和命令的参数
核心内建命令
alias 为命令和参数定义一个替代性名称
autoload 将shell函数预加载到内存中以便快速访问
bg 以后台模式执行一个作业
bindkey 将组合键和命令绑定到一起
builtin 执行指定的内建命令而不是同样名称的可执行文件
bye 跟exit相同
cd 切换当前工作目录
chdir 切换当前工作目录
command 将指定命令当做外部文件执行而不是函数或内建命令
declare 设置变量的数据类型(同typeset)
dirs 显示目录栈的内容
disabe 临时禁用指定的哈希表元素
disown 从作业表中移出指定的作业
echo 显示变量和文本
emulate 用zsh来模拟另一个shell,比如Bourne、Korn或C shell
enable 使能指定的哈希表元素
eval 在当前shell进程中执行指定的命令和参数
exec 执行指定的命令和参数来替换当前shell进程
exit 退出shell并返回指定的退出状态码。如果没有指定,使用最后一条命令的退出状态码
export 允许在子shell进程中使用指定的环境变量名及其值
false 返回退出状态码1
fc 从历史记录中选择某范围内的命令
fg 以前台模式执行指定的作业
float 将指定变量设为保存浮点值的变量
functions 将指定名称设为函数
getln 从缓冲栈中读取下一个值并将其放到指定变量中
getopts 提取命令行参数中的下一个有效选项并将它放到指定变量中
hash 直接修改命令哈希表的内容
history 列出历史记录文件中的命令
integer 将指定变量设为整数类型
jobs 列出指定作业的信息,或分配给shell进程的所有作业
kill 向指定进程或作业发送信号(默认为SIGTERM)
let 执行算数运算并将结果赋给一个变量
limit 设置或显示资源限制
local 为指定变量设置数据属性
log 显示受watch参数影响的当前登录到系统上的所有用户
logout 同exit,但只在shell是登录shell时有效
popd 从目录栈中删除下一项
print 显示变量和文本
printf 用C风格的格式字符串来显示变量和文本
pushd 改变当前工作目录,并将上一个目录放到目录栈中
pushln 将指定参数放到编辑缓冲栈中
pwd 显示当前工作目录的完整路径名
read 读取一行并用IFS变量将数据字段赋给指定变量
readonly 将值赋给不能修改的变量
rehash 重建命令哈希表
set 为shell设置选项或位置参数
setopt 为shell设置选项
shift 读取并删除第一个位置参数,然后将剩余的参数向前移动一个位置
source 找到指定文件并将其内容复制到当前位置
suspend 挂起shell的执行,直到它收到SIGCONT信号
test 如果指定条件为TRUE的话,返回退出状态码0
times 显示当前shell以及shell中所有运行进程的累积用户时间和系统时间
trap 阻断指定信号从而让shell无法处理,如果收到信号则执行指定命令
true 返回退出状态码0
ttyctl 锁定和解锁显示
type 显示shell会如何解释指定的命令
typeset 设置或显示变量的特性
ulimit 设置或显示shell或shell中运行进程的资源限制
umask 设置或显示创建文件和目录的默认权限
unalias 删除指定的命令别名
unfunction 删除指定的已定义函数
unhash 删除哈希表中的指定命令
unlimit 删除指定的资源限制
unset 删除指定的变量特征
unsetopt 删除指定的shell选项
wait 等待指定的作业或进程完成
whence 显示指定命令会如何被shell解释
where 显示指定命令的路径名,如果shell找到的话
which 用csh风格的输出显示指定命令的路径名
zcompile 编辑指定的函数或脚本从而能更快地自动加载
zmodload 对可加载zsh模块执行特定操作
zsh/cap POSIX兼容性命令
zsh/clone 将运行中的shell克隆到另一个终端的命令
zsh/compctl 控制命令补全的命令
zsh/complete 命令行补全命令
zsh/complist 命令行补全列表扩展命令
zsh/computil 命令行补全的实用工具命令
zsh/datetime 额外的日期和时间命令及变量
zsh/deltochar 重现了emacs功能的行编辑函数
zsh/files 基本的文件处理命令
zsh/mapfile 通过关联数组来访问外部文件
zsh/mathfunc 额外的科学函数
zsh/parameter 通过关联数组来访问命令哈希表
zsh/pcre 扩展的正则表达式库
zsh/sched 按设定时间执行命令的计划命令
zsh/net/socket Unix域套接字支持
zsh/stat 访问stat系统调用来提供系统的统计状况
zsh/system 访问各种底层系统功能的接口
zsh/net/tcp 访问TCP套接字
zsh/termcap termcap的接口
zsh/terminfo terminfo数据库的接口
zsh/zftp 专用FTP客户端命令
zsh/zle zsh行编辑器
zsh/zleparameter 用变量访问并修改zle
zsh/zprof 允许对shell函数进行性能参数统计
zsh/zpty 在虚拟终端中执行一条命令
zsh/zselect 阻断,直到文件描述符就绪才返回
zsh/zutil 各种shell实用工具
查看、添加和删除模块
执行zmodload即可
% zmodload &&
zsh/complete &
zsh/computil &
zsh/main &
zsh/parameter &
zsh/terminfo &
zsh/zutil &
zmodload +模块名称
可惜的是,执行完毕之后,不会有任何输出来告知模块添加完毕,不过可以再次执行zmodload查看
% zmodload zsh/zftp &
% zmodload & & & & &&
zsh/complete &
zsh/computil &
zsh/main &
zsh/net/tcp &
zsh/parameter &
zsh/terminfo &
zsh/zftp &
zsh/zutil &
zmodload -u +模块命令
% zmodload -u zsh/zftp &
注意:通常会将zmodload命令放到$HOME/.zshrc启动文件中,这样在zsh启动时,常用的函数就会自动加载
zsh脚本编程
zsh提供两种方法执行数学运算:
2.双圆括号
注意:实用let时,在表达式前后加上双引号才能支持空格
% let a=&1 + 2 * 3& & &
% echo $a &
为了解决精度问题,可以使用printf
% ((b = 2 + 3.1/2.2)) &
% echo $b & & & & & & &
% printf &%6.3f\n& $b &
注意:如果没有使用typeset来声明变量的数据类型,那么zsh会尝试自动分配数据类型
安装zsh/mathfunc即可
查看函数清单可参阅zshmodules
% echo $((sqrt(9))) &
结构化命令
if-then-else语句
for循环(包括C风格)
select语句
上面的语句与bash使用方法完全一致,除此之外,zsh还支持repeat结构化命令
repeat语法格式:
repeat param &
& & commands &
param必须是一个数字或者结果为数字的表达式
% repeat 3 &
repeat& do & & & & &&
repeat& echo &test& &
repeat& done &
zsh shell支持使用function和圆括号定义函数名来创建自定义函数
使用全局变量的方法同bash shell
#!/bin/zsh &
test_add () { &
& & printf $(($1 + $2)) &
test_add 3 7 &
使用方法与bash shell一致。
% ./zsh_test & & & &
可以不将函数放在脚本中。zsh shell通过fpath环境变量查找函数,可以放到fpath下的任何目录中。
但是使用之前,必须执行autoload命令(和bash shell的source命令或点命令类似吧)
zcompile会处理函数文件并为shell创建一个编译后的版本。
它会将函数编译成二进制格式,使zsh能够更快的加载。
运行zcompile命令后,它会创建这个函数文件的.zwc版本。在autoload命令在fpath中查找命令时,它会查看这个命令的.zwc版本,而不是文本版本。Shell脚本简单总结及编写脚本中的小技巧
Shell脚本简单总结及编写脚本中的小技巧
发布时间: 16:57:39
编辑:www.fx114.net
本篇文章主要介绍了"Shell脚本简单总结及编写脚本中的小技巧 ",主要涉及到Shell脚本简单总结及编写脚本中的小技巧 方面的内容,对于Shell脚本简单总结及编写脚本中的小技巧 感兴趣的同学可以参考一下。
主要从以下几个方面进行bash入门级的总结:
1、命令历史、命令补全
2、管道、重定向
3、命令别名和命令替换
4、命令行编辑
5、文件名通配
6、Bash的相关配置文件及变量
7、编程(条件判断、循环控制)
8、bash中的数组
9、shell编程技巧和编程规范
1、命令历史、命令补全
查看命令历史:history
-c:清空命令历史
-d OFFSET [n]: 删除指定位置的命令
-w:保存命令历史至历史文件中,这对于经常在不同的终端上执行命令很有用
命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
命令补全,路径补全
命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;
2、管道、重定向
管道------前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 命令3 | ...
如:cat /var/log/message |less
& &find ./ -name ex* | xargs mv /backup
& 覆盖输出
&& 追加输出
2& 重定向错误输出
2&& 追加方式
&& 重定向标准输出或错误输出至同一个文件
& 输入重定向
&& Here Document
:& file 清空一个文件
对于Here Document举个实例:
cat && /etc/hosts && EOF
"*/5 * * * * /usr/sbin/ntpdate ntp.api.bz & /dev/null 2&&1
/dev/null 2&&1 : 意思是将标准输出和错误输出全部重定向到/dev/null中
3、命令别名和命令替换
alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;
ualias CMDALIAS
对于我们设定别名的命令,如果要使用没有设定别名时的命令格式,即默认格式可以在命令前面加上: \
对于别名我们还可以写在配置文件中:
全局配置文件:/etc/bashrc
用户配置文件:~/.bashrc
命令替换: $(COMMAND), 反引号:`COMMAND`
把命令中某个子命令替换为其执行结果的过程
echo "The date time is : `date`"
echo "The date time is : $(date +%F)"
bash支持的引号:
``: 命令替换
"": 弱引用,可以实现变量替换
'': 强引用,不完成变量替换
4、命令行编辑
光标跳转:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 删除光标至命令行首的内容
Ctrl+k: 删除光标至命令行尾的内容
Ctrl+l: 清屏
5、文件名通配:globbing
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]: 大写字母
[:alpha:]: 大小写字母
[:digit:]: 数字
[:alnum:]: 数字和大小写字母
# man 7 glob
[^]: 匹配指定范围之外的任意单个字符
[[:alpha:]]*[[:space:]]*[^[:alpha:]]
6、Bash相关配置文件及变量
bash的配置文件:
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
~/.bash_profile, ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
登录式shell如何读取配置文件?
/etc/profile --& /etc/profile.d/*.sh --& ~/.bash_profile --& ~/.bashrc --& /etc/bashrc
非登录式shell如何配置文件?
~/.bashrc --& /etc/basrc --& /etc/profile.d/*.sh
关于环境变量命令介绍:
1.echo 显示某个环境变量值 echo $PATH
2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
3.env 显示所有环境变量
4.set 显示本地定义的shell变量
5.unset 清除环境变量 unset HELLO
6.readonly 设置只读环境变量 readonly HELLO
常见的环境变量
PATH:决定了shell将到哪些目录中寻找命令或程序 &
HOME:当前用户主目录
MAIL:是指当前用户的邮件存放目录
SHELL:是指当前用户用的是哪种Shell
HISTSIZE:是指保存历史命令记录的条数
LOGNAME:是指当前用户的登录名
HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的
LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
PS1:是基本提示符,对于root用户是#,对于普通用户是$
PS2:是附属提示符,默认是&&&。可以通过修改此环境变量来修改当前的命令符
位置变量:
$1, $2, ...$n
特殊变量:
$?:上一个命令的执行状态返回值,echo $0结果如果为0表示成功,非0表示失败.
$0:获取当前执行的shell脚本的文件名,通常结合basename使用
$*:获取当前shell的所有参数,$1 $2 $3 ,注意与$#的区别
$#:获取当前shell命令行中参数的总个数
$$:获取当前shell的进程号(PID)
$!:执行上一个指令的PID
$@:这个程序的所有参数 "$1" "$2" "$3" "&"
注意:有时候变量名很容易与其他文字混淆,比如我们在某个变量的值后面追加内容:
echo "this is the $numnd"
这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
echo "this is the ${num}nd"
这将打印: this is the 2nd
变量名不能以数字开头!!!!!!!!!!!!!!!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++
shell中如何进行算术运算:
1).let 算术运算表达式
let C=$A+$B
2).$[算术运算表达式]
C=$[$A+$B]
3).$((算术运算表达式))
C=$(($A+$B))
4).expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
C=`expr $A + $B`
这些计算方法都是shell编程的基础!!!
shell中关于字符串的简单操作:
取字符串长度
echo ${$A} 或 expr length $A
字符串的替换与删除操作:
${变量#关键字}---------&若变量内容从头开始的资料符合&关键字&,则将符合的最短资料删除
${变量##关键字}---------&若变量内容从头开始的资料符合&关键字&,则将符合的最长资料删除
${变量%关键字}---------&若变量内容从尾向前的资料符合&关键字&,则将符合的最短资料删
${变量%%关键字}---------&若变量内容从尾向前的资料符合&关键字&,则将符合的最长资料删除
${变量/旧字串/新字串}---------&若变量内容符合&旧字串&则&第一个旧字串会被新字串取代
${变量//旧字串/新字串}---------&若变量内容符合&旧字串&则&全部的旧字串会被新字串取代
7、编程(条件判断、循环控制)
下面总结下条件测试类型
条件测试的表达式:
[ expression ]
[[ expression ]] &-----在Bash高版本中基本上只能用这个高级的了...上面那个会报错!
test expression
-eq: 测试两个整数是否相等;比如 $A -eq $B
-ne: 测试两个整数是否不等;不等,为真;相等,为假;
-gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge: 大于或等于
-le:小于或等于
间逻辑关系:
逻辑与: &&
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑或: ||
注意:[ 条件1 -a 条件2 ] &等价于 [ 条件1 ] && [ 条件2 ]
还有一点要注意:
[[ 条件1 && 条件2 ]]这样使用
[ 条件1 && 条件2 ]这样使用
字符测试:
==:测试是否相等,相等为真,不等为假
!=: 测试是否不等,不等为真,等为假
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
string ="" &字符串为空
string !="" 字符串不为空
文件测试:
-e FILE:测试文件是否存在
-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-s FILE: 判断文件是否存在且大小大于0
-r FILE: 测试当前用户对指定文件是否有读取权限
-w FILE: 文件是否可写
-x FILE: 文件是否可执行
再简单说下脚本退出状态码
exit: 退出脚本
如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码;
# 是 0 表示正常退出
# 非 0 表示错误退出
+++++++++++++++++++++++++++++++++++++++++++++++++
条件判断--if
单分支if语句
if 判断条件; then
&statement1
&statement2
双分支的if语句:
if 判断条件; then
statement1
statement2
statement3
statement4
多分支的if语句:
if 判断条件1; then
&statement1
elif 判断条件2; then
&statement2
elif 判断条件3; then
&statement3
&statement4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
选择结构--case
case SWITCH in
&statement
&statement
&statement
说明:value1) 是正则表达式样式,可以用下面字符:
* 任意长度的字符串
C* 表示以C字符开头的字符串
? 任意单个字元,???? 表示4个字符的字符串
[abc] a, b, 或c三字元其中之一,如:[abc]123,匹配a123或b123或c123。
[a-n] 从a到n的任一字元
| 多重选择,分隔符
+++++++++++++++++++++++++++++++++++++++++++++
循环控制---for
两种用法:
for 变量 in 列表; do
for (( expr1 ; expr2 ; expr3 )); do
循环控制---while
while CONDITION; do
进入循环:条件满足
退出循环:条件不满足
while的特殊用法一(死循环):
while :; do
while的特殊用法二(从某个文件中读取行):
while read LINE; do
done & /PATH/TO/SOMEFILE
方法二另外一种写法:
cat ip.txt | while read line
echo $line
循环控制---until
until跟while相反,可参照while
until CONDITION; do
判断条件是否成立,不成立就执行循环体,成立就退出!
循环控制语句
中断循环,而后执行循环后面的语句;默认是跳出一层循环,如果要跳出多层循环,可以用 break n(n是大于1的数字,也就次数)。
中断当前这一次循环,提前进入下一次循环,默认跳过一层循环,如果要跳过多层循环,可以用 continue n(n是大于1的数字,也就次数)。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
select (产生菜单选择)
select 表达式是一种bash的扩展应用,尤其擅长于交互式使用,用户可以从一组不同的值中进行选择.
select 命令可以建立简单的列表,结构类似for循环,一般与case语句结合使用。
下面写一个实例:
#!/bin/bash
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
echo "You have selected $var"
8、bash中的数组使用
数组赋值方式:
(1) array=(var1 var2 var3 ... varN) &
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN) &
(3) array[0]=var1 & & &
& &arrya[1]=var2 & & &
& &... & & &
& &array[n]=varN
注意:shell中数组的下标默认是从0开始的!
获取数组元素个数或者长度:
(1) ${#array[@]} & & &
(2) ${#array[*]}
显示数组元素:
echo ${array[*]} &#显示所有元素
echo ${array[@]}
echo ${array[@]:0}
echo ${array[0]} &#显示第一个元素
echo ${array[@]:2} #不显示数组中前两个元素
echo ${array[@]:0:2} &#从第一个元素开始显示两个元素
删除数组中的元素:
unset array[2] #删除第三个元素
unset array & &#删除整个数组
子串删除:
echo ${array[@]#t*e} &# 左边开始最短的匹配:"t*e",这将匹配到"thre"
echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"
echo ${array[@] %o} & # 从字符串的结尾开始最短的匹配
echo ${array[@] %%o} &# 从字符串的结尾开始最长的匹配
子串替换:
echo ${array[@] /o/m} &#第一个匹配到的,会被删除
echo ${array[@] //o/m} #所有匹配到的,都会被删除
echo ${array[@] //o/} &#没有指定替换子串,则删除匹配到的子符
echo ${array[@] /#o/k} #替换字符串前端子串
echo ${array[@] /%o/k} #替换字符串后端子串
循环列出数组元素:
#!/bin/bash
arr=(ab bc cd)
lenarr=${#arr[@]}
for (( i=0; i&$lenarr}; i++ )); do & &
&echo ${arr[$i]}
#!/bin/bash
arr=(ab bc cd)
lenarr=${#arr[@]}
while [[ $i -lt $lenarr ]]
&echo ${arr[$i]}
一个实例:
#!/bin/bash
# 设置IFS将分割符 设置为 换行符(\n) &
OLDIFS=$IFS
# 读取文件内容到数组
fileArray=($(cat file.txt)) & & &
# restore it &
IFS=$OLDIFS &
tLen=${#fileArray[@]} & & &
# 循环显示文件内容 &
for (( i=0; i&${tLen}; i++ )); do & &
&echo "${fileArray[$i]}" &
9、shell编程技巧和编程规范
检测语法相关:bash -n 脚本名
命令追踪:bash -x 脚本名
shell输入和输出中:
cat 特殊用法
echo 特殊用法
后台执行命令:& nohup
如果正在运行一个进程,而且觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。Nohup就是不挂起的意思( no hang up)。
nohup命令的一般形式为?nohup command &
shift 用法
..........
简单说下编程规范:
1.文件注释说明
在编写的每个脚本文件中,应当包含文件注释、脚本用途简单描述、版本、作者等...如:
#!/bin/bash
#Description: .......
#Date: xxxx-xx-xx
#Version: ....
#Author: Andy
2.代码注释
3.函数注释--说明该函数的功能
4.变量命名规范化
取名要说明这个变量代表的含义
变量名或函数名不要太长
名称尽量使用大写或大写开头
5.代码注意缩进
&原创作品,允许转载,转载时请务必以超链接形式标明文章&&、作者信息和本声明。否则将追究法律责任。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 樱空释x卡索重生囚兄 的文章

 

随机推荐