首页
网络编程
编程语言
网页制作
大数据
数据库
手机开发
操作系统
网络推广
建站教程
网络安全
手机教程
云服务器
特色栏目:
python
批处理
net编程
Javascript
Php
Asp
Css
Html5
Android
seo
centos
当前位置 :
主页
>
操作系统
>
centos
>
脚本编程所涉及到的知识点总结
来源:互联网
收集:自由互联
发布时间:2022-06-20
脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的
脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。 脚本可以自动化完成某个工作,所以说写好脚本可以使运维工程师的工作更加轻松。 shell script是利用shell的功能所写的一个“程序”(program),这个程序是使用纯文本文件,将一些shell的语法或命令写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。 学习shell script的好处: 1、自动化管理(比如说把每天都需要手动执行的任务写成一个脚本,让其在指定的时间内运行) 2、追踪与管理系统 (比如说启动Linux 服务) 3、简单的入侵检测功能 (比如说可以写一个脚本,让其自动检测系统有没有异常,如果有异常,就通知管理员或立即加强防火墙规则) 4、连续命令单一化 (是指整合一些在命令行执行的连续命令,将它们写在脚本中,而后直接执行脚本就OK了) 5、简易的数据处理 (比如说比较两个数据的比较、字符串是否相等) 6、跨平台 7、可以帮助我们弄清楚Linux的来龙去脉 下面就开始脚本编程的基础知识学习吧 ! 一、善于使用判断式: test命令和判断符号[]都可以用于测试字符串、文件状态和数字,也可以同控制流结合。 语法格式: test 条件判断式 [ 条件判断式 ] 注意:中括号和条件判断式之间必须要有空格
1、字符串测试: =(或==)
两个字符串是否相等 !=
两个字符串是否不相等
-z
判断字符串是否为空,若为空则为真 -n
判断字符串是否为不空,若为不空则为真
2、文件类型判断: -e
该文件名是否存在 -f
该文件名是否存在并且为文件
-d
该文件名是否存在并且为目录 -L
该文件名是否存在并且为链接文件 -b
该文件名是否存在并且为块设备 -c
该文件名是否存在并且为字符设备 -p
该文件名是否存在并且为管道文件 -s
该文件名是否存在并且为套接字文件 3、文件权限检测: -r
该文件名是否存在并且具有可读权限 -w
该文件名是否存在并且具有可写权限 -x
该文件名是否存在并且具有可执行权限 -u
该文件名是否存在并且具有SUID属性 -g
该文件名是否存在并且具有SGID属性 -k
该文件名是否存在并且具有Sticky属性 -s
该文件名是否存在并且为非空白文件 4、数值测试: -eq
两个数值相等(equal) -ne
两个数值不等(not equal) -gt
数值1大于数值2(greater than) -lt
数值1小于数值2(less than) -ge
数值1大于等于数值2(greater than or equal) -le
数值1小于等于数值2(less than or equal) 5、多重条件判断: -a,&&
逻辑与 -o,||
逻辑或 !
非 二、条件判断式用法详解: 1、if条件判断 if条件判断是指当符合某个条件时就执行。 单分支if语句: 单分支的if语句是最简单的选择结构,这种结构只判断指定的条件,当“条件成立”时执行相应的操作。否则不做任何操作,语句格式如下: if [条件判断式];then
statement fi 例子: 写一个脚本,使用if语句计算2个数的大小,如果数字2大于数字1,就显示数字2>数字1 。 脚本内容如下:
#!/bin/bash
#Name:compare
#Description:compare the size of two numbers
#Author:Linli
#Version:0.0.1
#Datatime:06/16/12 14:15:00
#Usage: ./compare.sh NUM1 NUM2
##### scripts ########
if [ $1 -le $2 ];then
echo "$2
>
$1"
fi
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./compare.sh 2 3
3
>
2
双分支if语句: 双分支的if语句使用了两路命令操作。在条件成立或不成立的时候分别执行不同的命令序列,,格式如下: if [条件判断式];then
statement else
statement fi 例子: 补充上面的脚本,如果数字2不大于数字1,就显示数字2<=数字1。 将上面脚本中的scripts中的内容修改为如下内容:
##### scripts ########
if [ $1 -le $2 ];then
echo "$2
>
$1"
else
echo "$2
<
= $1"
fi
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./compare.sh 3 1
1
<
= 3
多分支if语句: 多分支if语句,可以进行多次判断,格式如下 if [条件判断式];then
statement 1 elif [条件判断式];then
statement 2 elif [条件判断式];then
... else
statement n fi 例子: 补充上面的脚本,如果数字2小于数字1,就显示数字2<数字1,否则就显示数字2=数字1。 将上面脚本中的scripts中的内容修改为如下内容:
##### scripts ########
if [ $1 -lt $2 ];then
echo "$2
>
$1"
elif [$1 -gt $2 ]
echo "$2
<
$1"
else
echo "$
2
= $1"
fi
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./compare.sh 3 1
1
<
3
[root@www.magedu.com scripts]# ./compare.sh 3 3
3
3
= 3
2、case...esac 常用于一个变量可能有多个变量值,每一个变量值执行不同的代码段。 使用格式: case $变量名称 in 变量值1) statement ;; 变量值2) statement ;; ... *) statement ;; esac 例子: 写一个脚本,使用case语句完成以下功能: 1、提示用户输入一个用户名;
2、显示一个菜单给用户,形如:
U|u show UID
G|g show GID
S|s show SHELL
Q|q quit 。 3、提醒用户选择一个选项,并显示其所选择的内容; 脚本内容如下:
#!/bin/bash
#Name:menu
#Description:case
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 15:00:00
#Usage: ./menu.sh
##### scripts ########
read -p "Please key in an user name: " name
cat
<
<
EOF
U|u) show UID
G|g) show GID
S|s) show SHELL
Q|q) quit
EOF
read -p "Please key in your choice: " choice
case $choice in
U|u)
id -u $name
;;
G|g)
id -g $name
;;
S|s)
grep "^$name" /etc/passwd | cut -d: -f7
;;
Q|q)
echo "quit"
exit 0
;;
esac
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./menu.sh
Please key in an user name: bin
U|u) show UID
G|g) show GID
S|s) show SHELL
Q|q) quit
Please key in your choice: u
1
3、脚本function shell script中的函数就是自定义一段执行代码,也可以说成是一些功能模块,有利于结构化编程和代码重用。 脚本function的使用格式: function 函数名 { statement } 函数名() { statement } 例子: 写一个脚本: 使用函数实现: 1、判断一个用户是否存在,用户名通过参数传递而来; 如果存在,就显示此用户的shell和UID 如果不存在,就说此用户不存在; 2、提示用户输入用户名,而后将其传递给上面的函数; 3、判断结束后不退出,而是提示用户可继续输入其它用户名,或输入(quit)退出; 脚本内容如下:
#!/bin/bash
#Name:user
#Description:function
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 15:40:00
#Usage: ./user.sh
##### scripts ########
myuser() {
if `grep "$1" /etc/passwd &
>
/dev/null` ;then
echo "shell: `grep "^$1" /etc/passwd | cut -d: -f7` UID:`id -u $1`"
else
echo "This user is not exist..."
fi
}
read -p "Please key in an user name: " name
until [ "$name" == "quit" ];do
myuser $name
read -p "You can continue key in an user name: " name
done
echo "quit"
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./user.sh
Please key in an user name: root
shell: /bin/bash UID:0
You can continue key in an user name: bin
shell: /sbin/nologin UID:1
You can continue key in an user name: gentoo
shell: /bin/bash UID:502
You can continue key in an user name: quit
quit
[root@www.magedu.com scripts]#
注意: 函数的返回值是函数调用时所执行的函数体中的最后一条语句的状态返回值;可以使用return命令自定义函数返回值。 三、循环 循环分为不定循环和固定循环(即循环几次是事先定义好的) 1、不定循环 不定循环是指符合指定的条件就循环执行某段代码段。 不定循环有:while..do..done 、 until..do..done 使用格式为:
while [ 条件判断式 ];do
statement done until [ 条件判断式 ];do
statement done 注意:while是指符合条件判断时才开始循环,直到条件不满足时退出。 until是指不符合条件判断时才开始循环,直到条件满足时退出。 例子1: 写一个脚本:计算100以内整数的和 脚本内容如下:
#!/bin/bash
#Name:sum
#Description:while
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 16:10:00
#Usage: ./sum.sh
##### scripts ########
declare -i
sum
=
0
declare -i
I
=
1
while [ $I -le 100 ];do
sum+=$I
let I++
done
echo "1+2+3+..+
100
=$sum"
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./sum.sh
1+2+3+..+
100
=
5050
例子2: 写一个脚本,显示此分区使用率的相关信息: 1、提醒用户输入一个分区,而后显示其使用率信息; 2、直到用户输入q或Q退出; 脚本内容如下:
#!/bin/bash
#Name:disk
#Description:until
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 16:55:00
#Usage: ./disk.sh
##### scripts ########
read -p "Please key in a disk partition: " disk
until [ "$disk" == "q" -o "$disk" == "Q" ];do
fdisk -l $disk
done
echo "quit"
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./disk.sh
Please key in a disk partition: /dev/sda
Disk /dev/sda: 343.5 GB, 343597383680 bytes
255 heads, 63 sectors/track, 41773 cylinders
Units
=
cylinders
of 16065 *
512
=
8225280
bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 5235 41945715 8e Linux LVM
/dev/sda3 5236 5366 1052257+ 82 Linux swap / Solaris
/dev/sda4 5367 41773 292439227+ 5 Extended
/dev/sda5 5367 5975 4891761 fd Linux raid autodetect
/dev/sda6 5976 6584 4891761 fd Linux raid autodetect
/dev/sda7 6585 7193 4891761 fd Linux raid autodetect
/dev/sda8 7194 7802 4891761 fd Linux raid autodetect
/dev/sda9 7803 9019 9775521 8e Linux LVM
/dev/sda10 9020 10236 9775521 8e Linux LVM
/dev/sda11 10237 10480 1959898+ 83 Linux
Please key in a disk partition: q
quit
补充while的相关知识点: while true;do statement done while [1];do 这个和while true一样 statement done while read LINE;do statement done < 文件路径 下面来举例说明以上3种while循环的使用方法: 例子1: 写一个脚本,使用while true;do..done 完成以下功能:
1、提示用户输入一个用户名;
2、显示一个菜单给用户,形如:
U|u show UID
G|g show GID
S|s show SHELL
Q|q quit 。
3、提醒用户选择一个选项,并显示其所选择的内容;显示完成后不退出,继续提示用户输入选项。 脚本内容如下:
#!/bin/bash
#Name:menu
#Description:case
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 17:30:00
#Usage: ./menu.sh
##### scripts ########
read -p "Please key in an user name: " name
cat
<
<
EOF
U|u) show UID
G|g) show GID
S|s) show SHELL
Q|q) quit
EOF
while true;do
read -p "Please key in your choice: " choice
case $choice in
U|u)
id -u $name
;;
G|g)
id -g $name
;;
S|s)
grep "^$name" /etc/passwd | cut -d: -f7
;;
Q|q)
echo "quit"
exit 0
;;
?)
echo "Wrong choice"
continue
;;
esac
done
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./menu.sh
bash menu2.sh
Please key in an user name: root
U|u) show UID
G|g) show GID
S|s) show SHELL
Q|q) quit
Please key in your choice: u
0
Please key in your choice: t
Wrong choice
Please key in your choice: s
/bin/bash
Please key in your choice: g
0
Please key in your choice: q
quit
例子2: 写一个脚本,使用while read LINE;do..done 完成以下功能: 显示/etc/passwd中的每一行内容。 脚本内容如下:
#!/bin/bash
#Name:read
#Description:while read LINE
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 17:30:00
#Usage: ./read.sh
##### scripts ########
while read LINE;do
echo "$LINE"
echo "OK"
done
<
/etc/passwd
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./
line.sh
root:x:0:0:root:/root:/bin/bash
OK
bin:x:1:1:bin:/bin:/sbin/nologin
OK
daemon:x:2:2:daemon:/sbin:/sbin/nologin
OK
adm:x:3:4:adm:/var/adm:/sbin/nologin
OK
... [显示的其它内容省略了]
2、固定循环 固定循环是指事先规定好循环几次。 使用格式为:
for 变量 in LIST;do
statement
done 例子: 写一个脚本,显示每一位用户的默认shell; eg. root: /bin/bash
student: /bin/bash 脚本内容如下:
#!/bin/bash
#Name:shell
#Description:for
#Author:Linli
#Version:0.0.1
#Datatime:06/17/12 17:20:00
#Usage: ./shell.sh
##### scripts ########
for I in `cut -d: -f1 /etc/passwd`;do
echo "$I : `grep "^$I" /etc/passwd | cut -d: -f7`"
done
##### scripts ########
脚本执行结果如下:
[root@www.magedu.com scripts]# ./oddsum.sh
root : /bin/bash
bin : /sbin/nologin
...[其他显示内容省略了]
四、break、continue、exit、return的用法 break : 中断循环,而后执行循环后面的语句 continue: 中断当前这一次循环,提前进入下一次循环 exit:
直接退出脚本 return: 用作自定义返回值
上一篇:
我的linux系统学习之道
下一篇:没有了
相关文章
脚本编程所涉及到的知识点总结
我的linux系统学习之道
linux发行版内核与标准内核编译经验
Centos5上部署udev
实战指导学生处理故障方法思想篇案例
避免误删文件:Linux回收站机制(升级版)
企业linux四国争霸
iptables防火墙详解及使用layer7阻止qq,酷狗,等P2P软件
老张戒烟记--DAY 50 闰秒
【250期门诊集锦】痛并快乐着的正则表达式
linux下用dsniff的tcpkill命令处理FIN_WAIT链接
Linux使用PAM锁定多次登陆失败的用户
网友评论
相关栏目
电脑知识
mac
win7
win10
win8
centos
ubuntu
RedHat
Debian
win2016
win2012
win11
最近更新
脚本编程所涉及到的知识点总结
我的linux系统学习之道
linux发行版内核与标准内核编译经验
Centos5上部署udev
实战指导学生处理故障方法思想篇案例
避免误删文件:Linux回收站机制(升级版)
企业linux四国争霸
iptables防火墙详解及使用layer7阻止qq,酷狗,等P2P软
老张戒烟记--DAY 50 闰秒
【250期门诊集锦】痛并快乐着的正则表达式
linux下用dsniff的tcpkill命令处理FIN_WAIT链接
Linux使用PAM锁定多次登陆失败的用户
Wiwiz虚拟机安装遇到"ErrorCode:4"及解决方法
准IT人,该何去何从
安装Heartbeat-3-0-7各种错误解决方案
热门文章
deepin apt命令安装最新版本的docker的方法
详解nginx.conf 中 root 目录设置问题
Docker部署Mysql集群的实现
idea发布web项目后Tomcat服务器找不到该项目的问题
Docker批量容器编排的实现
分析Tomcat的工作原理
Tomcat CentOS安装实现过程图解
Linux系统安装Tomcat并配置Service启动关闭
Linux系统(Centos6.5以上)安装jdk教程解析
docker 安装solr8.6.2 配置中文分词器的方法
Linux实现驱动模块传参过程解析
Linux SecureCRT显示乱码解决方案
Linux ssh服务器配置代码实例
Linux deb包解压、修改等操作方法代码示例
Ubuntu12.04建立内核树实现过程详解