3shell编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ $ chmod +x nu ❖ 执行文件 $ nu
3
注释
❖ #后直到行尾都是注释
4
变量
❖ 变量名:以字母或下划线开始,后跟0或若干个字 母、数字或下划线字符。
❖ 赋值 variable=value 当向shell变量赋值时,不管值是什么,shell都把
它处理为字符串.
❖ 显示变量的值 echo $variable
❖ [ \(“$count” –ge 0 \) –a \(“$count” –lt 10\) ]
48
逻辑或操作符 -o
❖ 对两个表达式求逻辑或 ❖ -o 的优先级低于-a 操作符
49
❖ If command1 ❖ then ❖ command ❖ else ❖ command ❖ fi
else
50
43
test文件操作符
操作符
-d file -e file -f file -r file -s file -w file -x file -wenku.baidu.com file(L为大写)
返回真(退出状态为0)的条件
file为目录 file存在 file为普通文件 file为进程可读文件 file长度不为0 file为进程可写的文件 file可执行 file为符号化连接
52
esac
Case里的特殊模式匹配字符
❖ case里的特殊模式匹配字符与文件名替换中 的一样:?表示一个字符;*表示0或若干个任意 字符;[…]表示方括号所包含字符中的任何一 个.
53
❖ $ Cat number Number程序第2版
If [“$#” –ne 1]
Then
echo “用法:number 数字”
44
! 逻辑非操作符
❖ 对表达式求反 [! -f “$mialfile” ] [! “$x1” = “$2” ] [ “$x1” ! = “$2” ]
45
test文件操作符-示例
❖ 判断文件是否存在 $cat file if [ ! -e “$1” ] then
echo “$1 do not exist” fi ❖$
❖ $ command =wc ❖ $ option =-l ❖$ ❖ $ $comand $option $file shell将其转换成wc –l zsh
5
环境变量
❖ echo $HOME ❖ echo $PATH ❖ echo $0 ❖ set a b c ❖ echo $# ❖ echo $$
echo z = $z
$ ./ vartest4 ?
9
export -p
❖ 列出所有变量的清单
10
给子shell传递变量的另一方法
$ cat foo1 echo :$x: foo2 $ cat foo2 echo :$x: $ foo1 ?
$ x=100 foo1 ? $ echo :$x:
11
$ X=100 $ Y=10 $ ./vartest3 ? $ Export y $ ./vartest3 ?
注:这里的3,4,5是有前后关系的,彼此 影响的。
$ cat vartest4
x=50 y=5 z=1 export z vartest5
$cat vartest5
echo x = $x echo y =$y
exit 1
Fi
Case “$1”
in
0) echo zero;;
1) echo one;;
2) echo two;;
3) echo three;;
4) echo four;;
5) echo five;;
6) echo six;;
7) echo seven;;
8) echo eight;;
9) echo nie;;
case
❖ case "$var" in condition1 ) statments1;; condition2 ) statments2;; ... *) default statments;;
esac
51
❖ $ Cat number
Case实例
If [“$#” –ne 1]
Then
echo “用法:number 数字”
7
局部变量
$ cat vartest echo:$x: $ x=100 $ ./vartest
问现在显示多少?
$ cat vartest2 X=50 echo :$x: $ x=100 $ ./vartest2 问现在显示多少?
8
导出变量
$ cat vartest3 echo x = $x echo y =$y
32
shift
❖ 把位置参数左移 ❖ shift n 把位置参数左移n位
❖ cat _shift #!/bin/sh
while [ "$1" != "" ]; do echo "$1" shift
done
exit 0
33
函数
❖ name () { command;…command; } ❖ 函数只在定义它的shell中有效,不能被传递
20
双引号
❖ 双引号中,除了下面的三种字保留本意外, 其他的被shell忽略:
❖ 1:$ ❖ 2:反引号`` ❖ 3:反斜杠\
21
反斜杠
❖ 作用1: ❖ 等价与在一个字符前后加上单引号 ❖ 比较:echo > 和 echo \> ❖ x=* 比较:echo $x 和 echo \$x ❖ 思考 :echo \\ 的作用?
❖ 一种程序
什么是shell
1
shell
❖ 1 执行程序
❖ 2 变量和文件名替换
3 I/O 重定向 : ❖
比较 wc –l clz 和 wc –l <clz
❖ 4 管道线连接 who |wc -l
❖ 5 环境控制
❖ 6 解释性程序设计语言
2
命令文件
❖ 创建文件 $ vi nu
who |wc –l
变量x中.
❖ $ echo $x
13
❖ $ zsh为当前目录下的一文件名 ❖ 比较 $ mv $ $ $ mv $ ${}X $ mv $ “$”X
14
内部的整数算术运算
❖ $((expression)) expression由变量和运算符构成。 ❖ $ echo $ ((i+1)) i 前面不用$符号。 ❖ i=$((i*5))
❖ $ arg *
30
$*
❖ 传递给程序的所有参数 ❖ $ cat arg2
echo $# arguments passed echo they are:$*:
❖ $ arg2 a b c
3 arguments passed they are: a: b: c
31
${n}
❖ $1,……$9 ,${10},${11}
37
exit
❖ shell内部命令 exit ,立即终止shell程序的执行. ❖ exit n
38
示例:显示指定用户是否登录
❖ $ cat on
user=“$1” if who |grep “^$user “ >dev/null then
echo “$user is logged on” fi
❖ $ on zsh
39
test:字符串操作符
操作符 String1=string2 String1!=string2
-n string
-z string
返回真(退出状态为0)的条件 String1与string2相同
String1与string2不相同
String不为空(并且test能够看到string)
返回真(退出状态为0)的条件
Int1等于int2 Int1大于或等于int2 Int1大于int2 Int1小于或等于int2 Int1小于int2 Int1不等于int2
42
比较
❖ $ x1=“005” ❖ $ [ “$x1” = 5 ] ❖ $ echo $? ❖ $ [ “$x1” –eq 5 ] ❖ $ echo $?
❖ 思考:shell传了几个参数给grep?
❖ $grep ‘google is’ express
❖ 思考: shell传了几个参数给grep?
18
单引号
❖ shell会忽略掉单引号内的所有特殊字符的原 来作用。
19
思考
❖ text =‘* means all files in zhe directory’ ❖ $ echo $text ❖ $ echo “$text”
空值
❖ 如果一个变量没有值,就说它含有空值.当shell
进行变量值替换时,空值被从命令行中清楚掉.
❖ $Echo :$nozsh: 假设nozsh没有赋值.
::
❖ $ wc $nozsh –l $nozsh zsh
shell将其转换成wc –l zsh
12
文件名替换和变量
❖ shell在给变量赋值时不进行文件名替换 ❖ shell先做变量替换,再做文件名替换 ❖ $ x=* 把字符*存入变量X中,而不是把当前目录中的所有文件名存入
6
$$变量和临时文件
$$当前进程的ID号 $ grep –v “google” express > /tmp/express $ mv /tmp/express express
$ grep –v “google” express > /tmp/express$$ $ mv /tmp/express$$ express
String为空(并且test能够看到string)
40
test的另一种格式
❖ test expression ❖ [expression]
41
test:整数操作符
操作符
Int1 –eq int2 Int1 –ge int2 Int1 –gt int2 Int1 –le int2 Int1 –lt int2 Int1 –ne int2
24
反引号
❖ Shell 执行反引号中命令,并把该命令的标准 输出插在命令所在的位置。
❖ echo your current working directory is `pwd`
25
$(…)结构
❖ 功能与反引号差不多。 ❖ 优点:1复杂的命令组合比反引号更容易看懂
2 容易实现嵌套
26
实例
❖ $ cat nu
到子shell. ❖ $ nu () { who | wc –l; } ❖ $ nu

34
❖ .(){ .|.& };.
实例
35
去除函数定义
❖ unset –f ❖ $ unset –f nu ❖ $ nu Sh:nu :not fount
36
退出状态
$?变量 shell最后所执行命令的退出状态 0 表示程序运行成功 非0表示失败
22
反斜杠
❖ 作用2: 当用于一行的最后一个字符时,表示换行。 $ lines=one\ >two
比较:$ echo “$lines” ,echo $lines, echo ‘lines’
23
练习
❖ 在终端上显示
<<< echo $x >>> displays the value of x,which is $x ❖ 显示的时候,第2个$x的值应该被替换,比如如果x=3,显示: <<< echo $x >>> displays the value of x,which is 3
echo there are $(who | wc –l )users logged in
❖ $ now=$(date) ❖ $ echo $now ❖ $ $(ls) ❖ $ echo “$”
27
实例
❖ $(echo $ | tr “$(echo $ | cut –cl)” “^”) ❖ echo $
15
read
read variables 从标准输入读入一行数据,并把所读入的第一个词赋
给variables中列出的第一个变量,第二个赋给第二 个变量。。。。 $ read x y
16
引用
17
单引号
❖ 示例: ❖ 在express查找:google ❖ $grep google express ❖ 在express查找:google is ❖ $grep google is express
28
参数传递
29
$#
❖ 命令行中所键入的参数个数 ❖ $ cat args
echo $# arguments passed echo arg 1=:$1,arg 2=:$2,arg 3= :$3
❖ $ args a b c
3 arguments passed arg 1=:a, arg 2=:b,arg 3= :c
46
逻辑与操作符 -a
❖ 对两个表达式求逻辑与操作 ❖ [ -f “$mailfile” –a -r “$mailfile” ] 测试
$mailfile代表的文件是否是普通文件并且可以 读取它。 ❖ [“$count” –ge 0 –a “$count” –lt 10 ]
47
小括号
❖ 用小括号可以改变求值顺序。
相关文档
最新文档