shell.docx
- 文档编号:10768132
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:16
- 大小:141.10KB
shell.docx
《shell.docx》由会员分享,可在线阅读,更多相关《shell.docx(16页珍藏版)》请在冰豆网上搜索。
shell
SHELL(命令解释器)编程
echo$SHELL当前用户shell(通过/etc/passwd设定)
执行history中的命令,使用!
数字或!
字符
切换shell,提示符下直接切换,如sh(bash),ksh
位置参数
默认的位置参数用:
$0----$9,表示位置参数的顺序,$0代表脚本名
例:
ls//bin/etc/usr/bin/dev......对应变量如下:
$0$1$2$3$4$5
使用shift加数字,可使移动位置参数位置
read命令read读入数据,赋值给变量
格式:
read变量1变量2变量3
输入数据时,变量间以空格分隔
环境变量
echo$PATH显示PATH变量内容(echo为显示命令,变量前加$)
env命令查看环境变量
set命令查看所有变量,包括环境变量与用户自定义变量
环境变量定义后,需要用export输出,或直接加在变量前,这样在任何的shell下都可以使用
HOME用户主目录例:
echo$HOME
PATH命令搜索路径,由冒号隔开
PS1SHELL提示符串
PWD当前所处目录
TERM终端类型,常用vt100
MAIL用户邮箱文件路径名
SHELLshell绝对路径
EDITOR编辑器
HISTSIZE保存命令历史记录
LOGNAME用户登录名
IFS指定内部变量分隔符,默认为空格,制表符和回车符
环境变量配置文件
/etc/profile全局环境变量
.profile.bash_profile当前用户环境变量,通常在用户主目录
预定义特殊变量
在shell中,预先定义了几个有特殊含义的变量,他们的值只能有shell根据所执行程序的实际情况进行赋值,而不能由用户直接设置,以下是一些等殊变量:
$*命令行中实际给出的所有位置参数,他并不限于9个位置参数。
$#记录传递给shell的参数个数,但不包括shell脚本本身。
因此$#给出命令行中位置参数的总数。
$$当前进程的PID
$!
在后台运行的最后一个进程的进程号。
$?
包含最后一条命令执行后的退出状态。
多数UNIX命令执行成功时,则返回值为0,如果执行失败,则返回非0值。
Shell本身返回$?
的当前值作为Shell命令的退出状态。
$@它与$*基本功能相同,但“$@”的值和“$*”不同。
例如若$*表示位置参数字符f1,f2,f3,那么“$*”表示“f1f2f3”,即所有位置参数用一对双引号括起来。
而“$@”表示“f1”“f2”“f3”,即每个位置参数分别用一对双引号括起来。
特殊字符
*?
[]匹配括号中任意字符例:
ls[1-4].sh,ls[1,3].sh
\取消特殊字符的功能,使其变成普通字符例:
/etc=>/\etc
[!
Z] 匹配不为Z的单个字符
引号和叹号
双引号由双引号括起来的字符(除$、倒引号和反斜线外)通常作为普通字符对待
单引号普通字符
倒引号(波浪键下)如用倒引号括起来,被括内容当作命令执行,再输出结果
expr算术表达式
输入(<)、输出(>)、重定向(输出重定向>>或输入重定向<<)
输入重定向:
需要定界符,通常用EOF代表,成对使用。
输出重定向:
例:
ls>>aa.txt,查看并输出至文件aa.txt
(一个>符号,覆盖原文件内容,二个>>符号,追加)
>a.txt清空文本
NULL(不存在的逻辑设备)
标注输入:
0
标准输出:
1
标准错误输出:
2
使NULL可保证脚本发生错误时,不被中断继续执行,否则服务器处于等待状态。
例:
ls-ltt>/dev/null
ls-l*.shtt>>/dev/null2>&1正确的和错误的信息都输出到同一个文件
逻辑操作符
;按顺序执行命令(前面的命令失败,不会影响到后面的执行)
&&连接的命令,前一个命令成功,才执行后一个命令
||前一个命令不成功,才执行后一个命令
成组命令
1使用花括号{}
以花括号括起来的命令可视为语法上的一条命令。
成组命令的执行顺序是根据命令出现的先后次序,由左向右执行。
左括号“{”后面应有一个空格;右括号“}”之前应有一个分号“;”
2使用圆括号()
算术运算符
+(加)-(减)\*(乘)/(除)%(取模)
Shell只提供整数的运算,在运算符的前后都要有空格,否则expr不对表达式进行计算,而直接输出他们。
例如:
result=`exprA+B`
测试
test中有关字符方面测试
测试语句有两种常用形式:
一种用test命令,一种用[],这两种形式是完全等价的。
例如:
test-f"$1"test[-f$1]
在格式上应注意,如果在test语句中使用shell变量,为表示完整,避免造成歧异起见最好用双引号将变量括起来。
利用方括号表示条件测试时,在左方括号之后右方括号之前各应有一个空格。
test中有关整数方面的测试
a=1
控制结构
case语句
while语句
until语句
for语句
流程控制命令
实例:
#!
/bin/bash
if[-d$1]
then
echo"Thisisadirectory"
else
echo"Thisisaordernaryfile"
fi
[oracle@sunshell]$sh5.shaa
Thisisadirectory
[oracle@sunshell]$sh5.sh1.sh
Thisisaordernaryfile
[oracle@sunshell]$
#!
/bin/bash
if[-d$1]
then
echo"Thisisadirectory"
else
if[-s$1];then
echo"Thisisanotemptyfile"
else
echo"Thisisaemptyfile"
fi
fi
~
"6.sh"13lines,169characters
[oracle@sunshell]$sh6.shaa
Thisisadirectory
[oracle@sunshell]$sh6.sh1.sh
Thisisanotemptyfile
[oracle@sunshell]$touchbb
[oracle@sunshell]$sh6.shbb
Thisisaemptyfile
[oracle@sunshell]$
字符串判断
#!
/bin/bash
ora_ps=`ps-ef|grepora_|grep-vgrep|grepsmon`
if[-z"$ora_ps"];then
echo"Oracleisnotstart"
else
echo"Oracleisstarted"
fi
[oracle@sunshell]$sh7.sh
Oracleisnotstart
数值判断
#!
/bin/bash
if[$#-ne2];then
echo"Pleaseinputtwonumber"
else
sum=`expr$1+$2`
echo"Thesummaryis:
$sum"
fi
[oracle@sunshell]$sh8.sh1
Pleaseinputtwonumber
[oracle@sunshell]$sh8.sh12
Thesummaryis:
3
[oracle@sunshell]$sh8.sh123
Pleaseinputtwonumber
[oracle@sunshell]$sh8.sh124
Thesummaryis:
25
[oracle@sunshell]$
-a两个条件都满足
-o一个条件满足即可
#!
/bin/bash
echo"Pleaseinputnumberone"
readnum1
echo"Pleaseinputnumbertwo"
readnum2
if[$num1-lt10-a$num2-gt1]
then
sum=`expr$num1+$num2`
echo"Summaryis:
$sum"
else
echo"Pleaseinputagain"
fi
[oracle@sunshell]$sh9.sh
Pleaseinputnumberone
1
Pleaseinputnumbertwo
6
Summaryis:
7
[oracle@sunshell]$sh9.sh
Pleaseinputnumberone
50
Pleaseinputnumbertwo
9
Pleaseinputagain
[oracle@sunshell]$
case条件选择
#!
/bin/bash
echo"Pleaseinputcharacterl|Lorh|Horw|W"
readaa
case$aain
l|L)ls/export/home/oracle;;
h|H)hostname;;
w|W)who;;
*)echo"Pleaseinputagain,error";;
esac
[oracle@sunshell]$sh10.sh
Pleaseinputcharacterl|Lorh|Horw|W
l
10202_database_solx86.ziplibxml2-2.6.31-sol10-x86-local.gzstart_ora.sh
Desktoplocal.cshrcstop_ora.sh
dir2local.loginsun.tar
Documentslocal.profilesunfile
emp.txtreadline-5.2-sol10-x86-localtop-3.6.1
libgcc-3.4.6-sol10-x86-localrlwrap-0.30top-3.6.1-sol10-x86-local
libiconv-1.11-sol10-x86-local.gzrlwrap-0.30.tartop-3.6.1.tar
libintl-3.4.0-sol10-x86-local.gzshell
libtool-2.4-sol10-x86-local.gzsoft
[oracle@sunshell]$sh10.sh
Pleaseinputcharacterl|Lorh|Horw|W
w
oraclepts/2Apr1909:
41(192.168.204.1)
oraclepts/3Apr1909:
41(192.168.204.1)
oraclepts/4Apr1909:
41(192.168.204.1)
oraclepts/5Apr1911:
24(192.168.204.1)
[oracle@sunshell]$sh10.sh
Pleaseinputcharacterl|Lorh|Horw|W
h
sun
[oracle@sunshell]$
while:
判断条件成立执行循环
#!
/bin/bash
num=0
while[$num-lt10]
do
num=`expr$num+1`
echo"loveunix...."
done
"while.sh"9lines,96characters
[oracle@sunshell]$shwhile.sh
loveunix....
loveunix....
loveunix....
loveunix....
loveunix....
loveunix....
loveunix....
loveunix....
loveunix....
loveunix....
[oracle@sunshell]
until:
判断不成立,执行循环
#!
/bin/bash
num=0
until[$num-ge10]
do
num=`expr$num+1`
echo"Loveunixoracle..."
done
~
"until.sh"[Newfile]9lines,102characters
[oracle@sunshell]$shuntil.sh
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
Loveunixoracle...
[oracle@sunshell]$
for循环
[oracle@sunshell]$catfor.sh
#!
/bin/bash
forfilin/etc/etc/hosts/
do
ls-l$fil
done
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- shell
![提示](https://static.bdocx.com/images/bang_tan.gif)