Shell编程

什么是Shell,能做什么?

Shell变量

Shell运算

Shell条件判断,以及循环

Shell函数

Shell测试

一、Shell能做什么

二、Shell变量

分:局部变量、环境变量

2.1 【声明变量】

2.1.1、变量名只能是:字母、下划线、数字,首字符不能为数字;
2.1.2、不能有空格,可用下划线代替;
2.1.3、不能有标点符号;
2.1.4、不能是bash关键字;
2.1.5、命名时,等号两边不能有空格;

【Shell系统变量】

符号含义
$0当前程序名称
$n当前程序的第n个参数 ,n=1,2,3…9
$*当前程序的所有参数(不包括程序本身)
$#当前程序的参数个数(不包括程序本身)
$?命令或程序执行完后的状态,一般返回0表示执行成功
$UID当前用户的ID
$PWD当前所在目录

【只读变量】

1、readonly 变量名 可以讲变量设置为只读变量,只读变量不能被修改、删除(unset)

【删除变量】

1、unset可以删除变量,使用unset后变量无法输出值;

【数组】

1、声明数组:数组名=(value1 value2 value3 value4 value5)值之间用空格隔开

2、数组之增删改查:

【增】索引方式增加值,数字索引从0开始

数组变量[索引号]=new value


a=(1 2)
a[3]=3
echo ${a[@]}
-----------------------------------------------
输出:123

【删】
a=(1 2)
unset a[0]
echo ${a[@]}
-----------------------------------------------
输出:2


【查】
变量名[索引号]

a=(1 2)
echo ${a[1]}
-----------------------------------------------
输出:2


变量名[@]输出数组所有值
echo ${a[@]}
-----------------------------------------------
输出:123


统计数组值的个数
a=(1 2 6)
echo ${#数组名[@]}
-----------------------------------------------
如果数组是上文的a:3




【改】
数组名[索引号]=new value


2.2 【Shell运算】

2.2.1 算数运算

符号含义
+
-
*
/
%

2.2.2 逻辑运算

符号含义备注取反
-f判断文件是否存在 eg: if [-f filename]file!
-d判断文件夹是否存在 eg: if [-e dirname]dir!
-eq等于,也可用“ = ”代替equal , 用于整型比较!
-ne不等于not equal, 用于整型比较!
-lt小于,也可用“ < ”代替less then, 用于整型比较!
-gt大于great then, 用于整型比较!
-le小于等于less equal, 用于整型比较!
-ge大于等于great equal, 用于整型比较!
-a双方都成立(and)and,逻辑表达式!
-o单方成立(or)or, 逻辑表达式!
-z空字符串!

Shell条件判断

【 if 】
【 if else】
【 if elif else fi 】

循环

【 for 循环 】
语法:

for  变量  in 字符串
	do
	语句1
	done

举例一:

for i in `seq 15`
do   
	echo "number is $i"
done

【 while 循环 】
语法:

while 条件语句
do
	语句1
done

案例一:while条件判断数字

i=1;
while  (( $1 < 10 ))
do
	echo $i;
	((i++));
done;

案例二:读取文件,并输出


while  read line
do
	echo $line;

done </etc/hosts

案例三:读取文件,并将本地/tmp/text.txt文件copy至远程服务器/tmp目录下


while  read line
do
	echo scp -r /tmp/test.txt root@$line:/tmp;

done </tmp/list.txt

注:/tmp/list.txt文件存储着远程服务器ip地址列表
list.txt文件内容如下:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

案例四:读取多行多列文件,取出每行第二列并实现远程部署


while  read line
do
	IP=`echo $line |awk '{print $2}'`
	echo scp -r /tmp/test.txt root@$IP:/tmp;

done </tmp/mulit_list.txt

注:/tmp/mulit_list.txt 文件存储着"序号"、“IP地址”、“文件地址1”、 “文件地址2”列表
mulit_list.txt文件内容如下:
1 192.168.1.1 /etc  /tmp
2 192.168.1.2 /etc  /tmp
3 192.168.1.3 /etc  /tmp
4 192.168.1.4 /etc  /tmp

【until循环语句】
含义:直到满足条件,才退出循环,否则一直执行action
语法

until 条件语句
do 
	action
done

案例一、条件判断数字

a=10
until (( $a < 0 ));
do
	echo $a;
	((a--))
done;

【case选择语句】
含义:如果arg等于pattern1的话执行语句1,如果arg==pattern2的话执行语句2,否则执行语句3
语法:

case $arg in
	pattern1)
	语句1
	;;
	pattern2)
	语句2
	;;
	*)
	语句3
	;;
esac

举例一、选择“安装”mysql、apache等

case $1 in
	Apache)
	echo "Install Apache Server Now"
	;;
	MySQL)
	echo "Install MySQL Server Now"
	;;
	Python)
	echo "Install Python Now"
	;;
	*)
	echo "Usage: { Apache | MySQL | Python | Help }"
	;;
esac

【select选择语句】
语法:

PS3="Select your will exec Menu:"
select i in "Apache" "MySQL" "Python"
do
	echo "Install $i Now"
done

举例一、

PS3="Select your will exec Menu:"
select i in "Apache安装" "MySQL安装" "Python安装"
do
	case $1 in
		Apache安装)
		echo "Install Apache Server Now"
		;;
		MySQL安装)
		echo "Install MySQL Server Now"
		;;
		Python安装)
		echo "Install Python Now"
		;;
		*)
		echo "Usage: { Apache | MySQL | Python | Help }"
		;;
	esac
done

函数

语法:

声明:
function 函数名()
{
任何内容
}

调用:
函数名

举例一、函数创建,结合select+case选择语句创建菜单栏并调用函数

声明:
function 函数1()
{
内容1
}
function 函数2()
{
内容2
}
function 函数3()
{
内容3
}

select i in "函数1" "函数2" "函数3"
do
	case $i in 
		函数名1)
		调用函数1
		;;
		
		函数名2)
		调用函数2
		;;
		函数名3)
		调用函数3
		;;
		*)
		echo "Usage: {函数名1|函数名2|函数名3|Help|}"
		;;
	esac
done

【增加知识点】sed、 awk、 grep、 find命令

【 sed 】这个命令经常使用,需深入学习一下

# 将text.txt文件中的192替换为10
sed -i 's/192/10/g' text.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值