赞
踩
批量处理,自动化
减少人为失误
shell底层也是用c语言实现的,--可以实现操控操作系统
1.sh
2.bash
3.ksh
for 变量 in 值1 值2
do
循环执行语句
done
案例:
[root@xiaoliu shell_test]# cat test.txt aa xx 123423 lhj abc [root@xiaoliu shell_test]# vim for1.sh [root@xiaoliu shell_test]# bash for1.sh aa xx 123423 lhj abc [root@xiaoliu shell_test]# cat for1.sh #!/bin/bash for i in `cat test.txt` do echo $i done
#for ((i=0;i<3;i++))
for ((初始化变量; 结束循环的条件; 运算))
do
循环执行的语句
done
案例:
for ((i=0;i<3;i++))
do
echo $i
done
for i in `seq 1 2 20`
do
echo $i
done
for i in {1..10}
do
echo $i
done
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
INCREMENT 增长--》步长值
默认步长值为1
步长值可以指定
[root@xiaoliu lianxi]# seq 5 1 2 3 4 5 [root@xiaoliu lianxi]# seq 5 10 5 6 7 8 9 10 [root@xiaoliu lianxi]# seq 5 2 10 5 7 9
-s 指定分隔符
-w 等宽输出
用0填充达到宽度一样
案例:
[root@xiaoliu lianxi]# seq -w 1 10
01
02
03
04
05
06
07
08
09
10
[root@xiaoliu lianxi]# seq -s "+" 1 10
1+2+3+4+5+6+7+8+9+10
[root@xiaoliu lianxi]# seq -s " " 1 10
1 2 3 4 5 6 7 8 9 10
$(命令) --》得到命令执行的结果
将seq 5命令执行的结果赋值给变量怒num,保存了命令执行的结果,方便后面的脚本使用
[root@xiaoliu lianxi]# num=$(seq 5)
[root@xiaoliu lianxi]# echo $num
1 2 3 4 5
[root@xiaoliu shell_test]# read -p "请输入用户数字:" num1 请输入用户数字:43 [root@xiaoliu shell_test]# echo $num1 43 [root@xiaoliu shell_test]# echo asfd asfd [root@xiaoliu shell_test]# echo num1 num1 [root@xiaoliu shell_test]# read a b sadfad [root@xiaoliu shell_test]# echo $a sadfad [root@xiaoliu shell_test]# echo $b [root@xiaoliu shell_test]# echo $? 0 [root@xiaoliu shell_test]# read a b c xx yy zz dd fff [root@xiaoliu shell_test]# echo $a xx [root@xiaoliu shell_test]# echo $b yy [root@xiaoliu shell_test]# echo $c zz dd fff [root@xiaoliu shell_test]#
1.
while read line
do
循环执行语句
done
2.
while 条件:
do
循环执行语句
done
#!bin/bash
while read line
do
echo "这一行为"$line
done < test.txt
#!bin/bash
cat test.txt|while read line
do
echo "这一行为"$line
done
注意:此语法中,while循环也支持break和continue
需求: #有一个fuwu.txt文本,文本内容如下 [root@zabbix-agent-nginx shell-test]# cat fuwu.txt IP AREA QUFU 192.168.0.1 HUNAN 2 89 60 192.168.1.1 HUNAN 3 192.168.3.1 HUBEI 4 9 10 192.168.4.1 HAINAN 56 34 192.168.5.1 HUHUA 8 输出每一个HUNAN地区的ip和qufu的映射关系 192.168.0.1的区服为:2 192.168.0.1的区服为:89 192.168.0.1的区服为:60 192.168.1.1的区服为:3 答案: 方法一: #!bin/bash cat fuwu.txt|grep "HUNAN"|while read a b c do for i in $c do echo $a"的区服为:"$i done done 方法二: #!bin/bash while read ip name qufu do if [ $name == "HUNAN" ] then for i in $qufu do echo $ip"的区服为:"$i done fi done < fuwu.txt
1. if 条件 then 执行语句 fi 2. if 条件 then 执行语句 else 执行语句 fi 3. if [ command ];then 符合该条件执行的语句 elif [ command ];then 符合该条件执行的语句 else 符合该条件执行的语句 fi
2.1常用判断:
[ -d FILE ] 如果 FILE 存在且是一个目录则返回为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真。
案例:
#!bin/bash if [ -f test.txt ] then echo "文件已存在" else echo "文件不存在" fi if id sc &>/dev/null then echo "sc已存在" else echo "sc不存在" fi
2.2字符串判断:
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
[ STRING1 ] 如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。
2.3 数值判断:
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=
2.4 逻辑判断:
[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] 用OR来合并两个条件
[ ] && [ ] 用AND来合并两个条件
if [ 123 -gt 22 ]
then
echo "大于"
else
echo "小于"
fi
if (( 123 > 22 ))
then
echo "大于"
else
echo "小于"
fi
[root@xiaoliu shell_test]# echo "3.2+6.2"|bc
9.4
[root@xiaoliu shell_test]# echo "6>3"|bc
1 1表示为真,0表示为假
[root@xiaoliu shell_test]# echo "6.7>3"|bc
1
[root@xiaoliu shell_test]# echo "6.7<3"|bc
0
5.1 第一种: $(( 表达式 ))
5.2 第二种: $[ 表达式 ]
5.3 第三种: expr 表达式
5.4 第四种: let
[root@xiaoliu ~]# a=$(( 3+2 )) [root@xiaoliu ~]# echo $a 5 [root@xiaoliu ~]# let a=3+4 [root@xiaoliu ~]# echo $a 7 [root@xiaoliu ~]# echo $[ 30 + 40 ] 70 [root@xiaoliu ~]# a=20 [root@xiaoliu ~]# b=55 [root@xiaoliu ~]# echo $[ $a + $b ] 75 [root@xiaoliu ~]# expr $a+$b 20+55 [root@xiaoliu ~]# expr $a + $b 75
[] 碰到空白会进行分词
[[]] 引号内的字符串不会进行分词
[root@xiaoliu shell_test]# name="sc tl"
[root@xiaoliu shell_test]# [ $name == "sc tl" ]
-bash: [: 参数太多
[root@xiaoliu shell_test]# [[ $name == "sc tl" ]]
1.安装chrony软件
yum install -y chrony
2.重启整个服务
systemctl restart chronyd
3.设置开机自启动
systemctl enable chronyd
case语句:
case $变量 in
value1)
语句体
;;
value2)
语句体
;;
*)
语句体
;;
esac
用case语句实现输入两个整数,选择对这两个整数进行加减乘除运算,输入p就退出
#!bin/bash read -p "请输入第一个整数:" num1 read -p "请输入第二个整数:" num2 echo "1、加法 2、减法 3、乘法 4、除法" while true do read -p "请输入你想要执行的操作(按q退出):" option case $option in 1) echo $(( $num1+$num2 )) ;; 2) echo $(( $num1-$num2 )) ;; 3) echo $(( $num1*$num2 )) ;; 4) echo $(( $num1/$num2 )) ;; q) break ;; esac done
#定义一个数组 [root@mysql-binary shell_test]# a=(xx yy zz ff) #直接用$a查看的是数组里面的第一个元素 [root@mysql-binary shell_test]# echo $a xx #查看数组里面所有的元素 [root@mysql-binary shell_test]# echo ${a[*]} xx yy zz ff [root@mysql-binary shell_test]# echo ${a[@]} xx yy zz ff #对数组进行切片时,不能用a,要用整个数组里的所有元素进行切片 [root@mysql-binary shell_test]# echo ${a:1:3} x [root@mysql-binary shell_test]# echo ${a[*]:1:3} yy zz ff #查看数组的长度 [root@mysql-binary shell_test]# echo ${#a[*]} 4 [root@mysql-binary shell_test]# echo ${#a[@]} 4 #修改数组元素的值 [root@mysql-binary shell_test]# a[3]="hh" [root@mysql-binary shell_test]# echo ${a[*]} xx yy zz hh #删除数组下标为3的元素 [root@mysql-binary shell_test]# unset a[3] [root@mysql-binary shell_test]# echo ${a[*]} xx yy zz #删除数组下标为1的元素 [root@mysql-binary shell_test]# unset a[1] [root@mysql-binary shell_test]# echo ${a[*]} xx zz #查看下标 [root@mysql-binary shell_test]# echo ${!a[*]} 0 2 #删除下标为2的元素 [root@mysql-binary shell_test]# unset a[2] [root@mysql-binary shell_test]# echo ${a[*]} xx
[root@xiaoliu lianxi]# echo $RANDOM
28727
[root@xiaoliu lianxi]# echo $(( $RANDOM%10 ))
6
[root@xiaoliu lianxi]# echo $(( $RANDOM%50+150 ))
165
随机产生12盏灯的灯亮和灯灭情况(灯亮:1,灯灭:0),保存在数组里面,
随机去打灯,随机挑选一个下标,取值如果为1,就表示“灯亮,赢了”,如果为0,就表示“灯灭”
#!bin/bash a=() for i in {1..12} do num1=$(( $RANDOM%2 )) a[$i]=$num1 done echo ${a[*]} lucky_num=$(( $RANDOM%12+1 )) echo $lucky_num if [ ${a[$lucky_num]} == 1 ] then echo "灯亮,赢了" else echo "灯灭,输了" fi
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。