shell脚本基础
变量
bash的变量:
环境变量
本地变量
位置变量
特殊变量
本地变量:bash:作用域为整个bash进程
局部变量:作用域为当前代码段 local VARNAME=VALUE
引用变量:${VARNAME}
环境变量:作用域为当前的shell进程及其子进程 export VARNAME=VALUE导出的含义
返回结果
程序执行可能有两类返回值:
程序执行结果
程序状态返回代码(0-255) 0表示正常执行,其他的为错误执行
如检查一下当前主机上是否存在一个叫做student的用户
id student 然后echo $? 如果存在的话会显示0,否则显示其他
shell的条件测试条件测试类型
数值测试
-eq :测试两个整数是否相等
-ne :测试两个整数是否不等,不等为真,等为假
-gt:测试一个数是否大于另外一个数
-lt:测试一个数是否小于另外一个数
-ge:大于或等于
-le:小于或等于
文件类型的确定
-e 该档名是否存在
-f 该档名是否存在且为文件
-d 该档名是否存在
字符串判断
test -z string 判定字符串是否为 0 若 string 为空字符串,则为 true
test str1 == str2 判定 str1 是否等于 str2 ,若相等,则回传 true
test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false
str1 =~ str2 判断str2是否是str1的子串
-n 与 -z相反
逻辑与和逻辑或
&& 逻辑与 前面命令是真时才执行后面的命令
|| 逻辑或 前面命令为假时才执行后面的命令
流程控制
if条件判断
单层分支
if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的指令工作内容;
fi(这个if非常容易忘记)
多重分支
if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的指令工作内容;
else
当条件判断式不成立时,可以进行的指令工作内容;
fi
for循环的结构:
for 变量 in 列表; do
循环体
done
while 循环(适用于循环次数未知的程序)
语法:
while CONDITON;do
statement
…
done
while 需要循环修正
while 里面的循环初始值需要给出,如i=1
还需要注意的是需要有循环修正,使得循环不至于一直持续下去
until(直到满足一定条件,循环终止)
语法:
until CONDITTION; do
statement
…
done
即是条件最开始是不满足的,只有当条件满足的时候循环才中止
与while的当条件不满足时就终止刚好相反
所以平常中有while的判断条件为 当什么条件不满足的时候就怎么样此时就可以用until
for循环的第二种使用方式
for (( expr1; expr2; expr3 ));do
循环体
done
expr1 给定变量的初始值
expr2 判定循环退出条件
expr3 修正变量的值
case语句 多分支选择结构
语法
case SWITCH in 这里的SWITCH一般是要引用变量的值
value1)
statement
…
;;
value2)
statement
…
;;
value3)
statement
…
;;
*)
statement
…
;;
esac
其中的value是字符,故前面的字符比较也是可以用的
while的特殊用法1:
无限循环,加上break之后,在某一条件满足的时候退出
具体的用法:
while :;do
statement
done
while的特殊用法2:
while可以从指定的文本文件中以行为单位,依次遍历其中的行
while read line; do
statement
done
脚本运用实例
写一个脚本,提示用户输入一个字符串,将其转换为大写后输出,如果用户输入的quit,则退出
写一个脚本每隔5秒检测Hadoop用户是否登录,如果登录则显示"hadoop is logged in "
如何测试192.168.0.151~192.168.7.254 之间的主机是否在线,统计个数并将它们显示出来
脚本综合运用
1 #!/bin/bash
2 #
3 #program
4 # the program can make 3 partations
5 #Author:Double.f
6 #Date:2017-4-13
7
8
9 fdisk -l | grep '^Disk /dev/sd[a-z]' | awk -F: '{print $1}' | cut -d' ' -f2 | sed '$ a \q'
10 A=`fdisk -l | grep '^Disk /dev/sd[a-z]' | awk -F: '{print $1}' | cut -d' ' -f2 | sed '$ a \q'`
11
12 read -p "please choose a disk: " DISK
13
14 while :;do
15 S=0
16 for I in `echo $A`;do
17
18 if [ $I == $DISK ];then
19 S=1
20 break
21 fi
22
23 done
24 if [ $S -ne 1 ];then
25 read -p "please choose a disk: " DISK
26 fi
27
28 if [ $S -eq 1 ];then
29 break
30 fi
31 done
32
33 if [ $DISK == ‘q’ ];then
34 echo "Quiting….."
35 sleep 2
36 exit 8
37 fi
38
39 rm -rf /tmp/zhanshi.txt
40
41 read -p "the operation will delte the full data of the $DISK,continue or exit?(Y/N):" JUDGE
42 until [ $JUDGE == ‘Y’ -o $JUDGE == ‘N’ ];do
43 read -p "Try again,and choose a correct option :" JUDGE
44 done
45
46
47 for I in `mount | grep "$DISK" | awk '{print $1}'`;do
48 fuser -km $I
49 umount $I
50 sleep 1
51 echo "umount $I finished"
52 done
53
54
55 if [ $JUDGE == ‘Y’ ];then
56 dd if=/dev/zero of=$DISK bs=512k count=1 &> /dev/null
57 sync
58 sleep 2
59 echo 'n
60 p
61 1
62
63 +20M
64 n
65 p
66 2
67
68 +512M
69 n
70 p
71 3
73 +128M
74 t
75 3
76 82
77 w ' | fdisk $DISK &> /dev/null
78
79 echo "partation finished !"
80 sleep 1
81 echo "mkfs is going.."
82 sleep 1
83 partprobe $DISK
84 sync
85 sleep 1
86 mke2fs -j ${DISK}1 &>/dev/null
87 mke2fs -j ${DISK}2 &> /dev/null
88 mkswap ${DISK}3 &> /dev/null
89
90 echo "mkfs is finished !"
91 sleep 1
92 echo "Preparing mount …."
93 read -p "please input a mount directory ${DISK}1:" DIR1
94 read -p "please input a mount directory ${DISK}2:" DIR2
95 read -p "please input a mount directory ${DISK}3:" DIR3
96
97 until [ $DIR1 != $DIR2 -a $DIR1 != $DIR3 -a $DIR2 != $DIR3 ];do
98 echo " mount is busy !!!please choose other directory"
99 read -p "please input a mount directory ${DISK}1:" DIR1
100 read -p "please input a mount directory ${DISK}2:" DIR2
101 read -p "please input a mount directory ${DISK}3:" DIR3
102 done
104 mount ${DISK}1 $DIR1
105 mount ${DISK}2 $DIR2
106 swapon ${DISK}3
107
108 sleep 1
109 echo "mount is finished !"
110
111 else
112 exit 9
113 fi
原创文章,作者:Double f,如若转载,请注明出处:http://www.178linux.com/73381
评论列表(1条)
主要介绍了bash编程的基础用法,及示例说明,内容总结的详细,排版也很好,在排版上需要注意将终端命令或代码添加至”插入程序代码”中去,还有在总结的shell程序,建议将注释标明