shell脚本编程

一、学习shell的意义

1、什么是shell

Shell——是介于用户与系统之间,帮助用户与系统进行沟通的工具。除了文字模式的 shell 外,GNOME、KDE 这类图形界面也属于 shell 的范畴。我们通常提到 shell 时都是指狭义的 shell,即文字模式的 shell。

2、Linux中有哪些shell

一般来说,shell 可以分成两类。第一类是由 Bourneshell 衍生出来的包括 sh,ksh,bash,与 zsh。第二类是由 Cshell 衍生出来的,包括 csh 与 tcsh。 除此之外还有一个rc。

3、为什么要学习 shell

1. 图形用户界面——只是一个程序套件,文字模式的 shell 功能和能执行的任务则比图形界面要强得多。
2. shell 是文字模式,因此远程登录和传输的速度比图形界面更快
3. shell 使用更方便。在图形界面需要打开许多窗口执行许多次点击的任务,使用 shell 也许只需要简单几个命令就能完成了。
举例:
(1) 查看一个文件或目录的大小 ls du
(2) 定时执行一个任务 crontab -e

4、如何写一个简单的bash shell

1) 可以使用任何文本编辑工具编写,如:vim
#!/bin/bash #放置在文件的开头
2) 设置脚本执行权限
chmod a+x filename
chmod 700 filename

3) 执行脚本
bash your_script.sh
sh your_script.sh

./your_script.sh

二、SHELL中的变量

1. 变量的分类

1.1.系统环境变量

系统本身所有,通常为大写字母
系统变量通过set或declare指令进行查看

1.2.UDV 变量(user defined variable)

用户创建和维护,建议大写(为什么?)
原因:
避免冲突与混淆,因为Linux系统中命令全部采用小写的方式

2. 变量的属性和定义

2.1.变量的属性

1) Shell中所有变量定义都为字符串。
2) 变量区分大小写,如:foo和Foo是两个不同的变量
3) 变量必须以字母或下划线开头,不得有”,”,”:”,”\”等
特殊字符。

3. 变量的声明

3.1) 变量的定义

变量名=值 (变量名与值之间”=”号没有空格)
举例: LANG=cn 与LAGN= en LANG =en

3.2) 声明带空格变量

需要加上引号——” ”
举例:MY=23 67

3.3) 声明一个只读变量

readonly MY_UDV=guozi

3.4) 修改变量

修改环境变量 例: PATH=$PATH:/opt/bin
修改用户自定义变量 例: SRC=”guozi”

4. 变量的使用

变量前加“$”符号
echo $HOME 或echo ${HOME}
echo $USER或echo ${USER}

三、SHELL中的重定向和管道

1. 什么叫重定向

将输入或输出重新指定到别的位置。

2. 重定向输出

2.1.命令执行数据流

文件/设备---- 标准输入 -->命令 --- 标准输出 -->文件/设备
|
标准错误

文件/设备

直接输入:ls –l > lsoutput.txt
追加:ls –l /home >> lsoutput.txt
输出到空设备:/dev/null
“>” 代表重定向到哪里
“1” 表示stdout标准输出,系统默认值是1
">/dev/null"等同于"1>/dev/null"
“2” 表示stderr标准错误
“&” 表示等同于的意思,2>&1,表示2的输出重定向等同于1
举例:killall ser > /dev/null 2>&1

3. 重定向输入

3.1.shell终端中交互式输入内容

格式:cat >> 2.txt <<EOF [内容] EOF

3.2.从一个文件中读取内容赋值给一个变量

格式:read variable < filename

4. 管道

管道好比自来水管,从前往后流!
举例:
1) 将指定文件夹内的文件按文件大小从小到大排列。 ls <directory> | sort
2) 查看mysql进程是否存在  netstat | grep 'mysql' 
3) 查询一个软件包(rpm)的安装信息 rpm -qa 软件包 | less
4) 利用管道和重定向将查询到的软件安装信息输出到指定文件  rpm -qa 软件包 | less >1.txt

四、echo命令

1. 显示文本或变量值

格式:echo [选项][字符,变量……]
选项:
-n 不换行输出 echo默认是输出一次换一行
-e 增强启用转义字符解析
\a 响铃 \b 退格 \c 去除尾部的新行
\n 新的一行 \r 回车 \t 水平制表符
\\ 斜杠 \0NNN 八进制 \0xHH 十六进制输出

举例: echo -e “ Welcome to GuoZi’ s \n\t\\ shell programming”

2. 输出有颜色的字符

前景色:十位数的3表示 范围:30-37(3x表示)
背景色:十位数的4表示 范围:40-47(4x表示)
个位数表示色彩
30(黑色) 31(红色) 32(绿色) 33(黄色)
34(蓝色) 35(洋红) 36(青色) 37(白色)
举例: echo -e "Network restarting... [\033[32;40m OK \033[0m]"

3. echo的实际应用

写一个脚本:提示用户输入一个密码,并把密码进行base64或
md5加密,然后将加密后的密码保存到/root/secrets文件中
步骤:
1、提示输入密码;
2、对密码加密;
3、重定向输入到文件;
4、查看密码。

五、shell中的数学计算

1. 计算方法

有三种格式可以进行数学计算。

1.1.第一种——expr

格式:expr 操作数1 操作符 操作数2
举例:
1 expr 1 + 2 TMP=$(expr 1 + 2)
2 expr 1 + 4 / 3 TMP=$(expr 1 + 4 / 3 )
3 expr 1 + 2 * 3(?)

特点:格式要求相对严格

1.2.第二种——( )

格式:$((操作数1 操作符 操作数2 ))
举例:TMP=$((1 + 3))
特点:格式要求相对较松

1.3.第三种——let

格式:let “[变量] [操作符] 操作数1 操作符 操作数2”
举例:
1 let “1+2”
2 let “TMP2=1+2”

特点:格式要求松,计算灵活

2. 数学计算的实际用途

写一个简单的脚本:
当/tmp目录下文件占用率达到80%时, 对磁盘文件进行特定的清
理,当达到设定值时对管理员发一封邮件报警,要求每天检查一次。
步骤:
1、使用df命令对/tmp目录进行查看;
2、对磁盘占用率进行计算
3、判断是否达到特定值
4、根据第3步结果决定报警
5、将脚本加入到定期执行计划中

六、shell中的引用

1. 什么叫引用

对shell脚本、程序、终端命令、变量、字符串等结果的反馈。

2. 引用的类型

" " 双引号      ` 反引号        ' ' 单引号       \ 反斜线

3. 引用的必要性

目的:防止不必要的误会。
举例:
1 echo hello world * 与 echo “hello world *”
2 echo “hello ‘ world “ welcome”
3 echo “hello \ world”

3.1. 双引号

使用双引号可引用除字符 $、`、\ 外的任意字符或字符串。
举例:
1 echo “Welcome to #$%^ to Shell programming”
2 echo “Welcome to $ABC programming”

3.2. 单引号

单引号与双引号类似,不同的是 shell 会忽略任何引用值。
举例:
echo “The ‘$BOY’ is 24 years old”

3.3. 反引号

反引号用于将系统命令的输出到变量,举例:
1 echo `hello` (错×)
2 echo `date` (对√)

3.4. 反斜线

如果下一个字符有特殊含义,反斜线防止 shell误解其含义。 下述字符包含有特殊意义: & * + ^ $ ` " | ?。

4. 小结

我在使用引用时遵循两条规则:
1) 输出字符串用双引号,但不要引用双引号本身。
2) 如果使用引用得到的结果不理想,再试另一种,毕竟只有三种引用方式,可以充分尝试。

七、文件名匹配

 学习目的
• 匹配文件名中的任何字符串。
• 匹配文件名中的单个字符。
• 匹配文件名中的字母或数字字符。

1. 匹配文件的符号

定义:匹配字符串类型的符号称之为元字符。

1.1. * 匹配文件

* 匹配文件名中的任何字符串,包括空字符串。
举例: ls /etc/*.conf
ls /etc/cg*.co*f

1.2. ? 匹配文件

? 匹配文件名中的任何单个字符。
举例:
ls /etc/pptp?.conf
ls /etc/??st.conf

1.3.[ ] 匹配文件

 [...] 匹配 [ ] 中所包含的任何一个字符。
杂乱匹配:ls /etc/[wersdfp]syslog.conf
范围匹配:ls [0-9][a-zA-Z].txt

 [!...] 匹配 [ ] 中非感叹号!之后的任意一个字符与上一条规则刚好相反。
举例: ls [!0-9]*.txt
匹配非数字开头的后缀名为txt的所有文件。

2. 综合应用

查找一个以数字开头,接着包括两个小写英文字母,然后再接任
意两个字符的以.conf结尾的文件名。 (如:5abcui.conf是符合条件
的。

八、命令执行的顺序和结果

 学习目标
• 命令执行后的返回值。
• 命令执行的控制。
• 命令执行的组合。

1. 命令的执行结果

成功:返回0
失败:返回非0

2. 命令执行控制

2.1.使用&&符号

格式:命令1 && 命令2 && …
说明:如果命令1执行成功,那么执行命令2……
举例: cp /home/file.txt /opt && echo “Copy file success”
编译源码时: ./configure && make && make install
用处:用于脚本的执行的调试。

2.2.使用 || 符号

格式:命令1 || 命令2 || …
说明:如果||左边的命令执行失败了,那么接着执行右边的命令
举例: cp hello.txt copy.txt || echo “Copy file failed”
用处:用于脚本的执行的调试。

3. 命令的组合使用

格式1: “;”一次下达两个以上的命令
格式2: (命令1;命令2;. . .) 在当前shell中执行
格式3:{命令1;命令2; . . . } 在子shell中执行

举例:
1) ls /usr ; cd ; echo “OK”
2) (ls ; cat hello.txt; cd) || echo “success”
3) {ls ; cat hello.txt; cd}|| echo “success”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值