2025年Shell编程语法

Shell编程语法shell 编程语法 一 shell 语法的定义 1 shell 脚本优势 批量处理 自动化 减少人为失误 2 shell 底层的实现原理 shell 底层也是用 c 语言实现的 可以实现操控操作系统 3 shell 的种类 1 sh 2 bash 3 ksh 二 shell 的基本语法 for 循环

大家好,我是讯享网,很高兴认识大家。

shell编程语法

一、shell语法的定义
1、shell脚本优势
批量处理,自动化 减少人为失误 

讯享网
2、shell底层的实现原理
讯享网shell底层也是用c语言实现的,--可以实现操控操作系统 
3、shell的种类:
 1.sh 2.bash 3.ksh 
二、shell的基本语法–for循环
1、语法一:
讯享网 for 变量 in 值1 值2 do 循环执行语句 done 

案例:

[root@xiaoliu shell_test]# cat test.txt aa xx  lhj abc [root@xiaoliu shell_test]# vim for1.sh [root@xiaoliu shell_test]# bash for1.sh aa xx  lhj abc [root@xiaoliu shell_test]# cat for1.sh #!/bin/bash for i in `cat test.txt` do echo $i done 
2.语法二:
讯享网 #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命令:打印出一串序列 --》有序的数字
讯享网 seq [OPTION]... LAST seq [OPTION]... FIRST LAST seq [OPTION]... FIRST INCREMENT LAST INCREMENT 增长--》步长值 默认步长值为1 步长值可以指定 
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 
2.重要选项:
讯享网-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 
3.seq主要是和for循环配合使用,用来控制for循环的次数
讯享网 $(命令) --》得到命令执行的结果 将seq 5命令执行的结果赋值给变量怒num,保存了命令执行的结果,方便后面的脚本使用 [root@xiaoliu lianxi]# num=$(seq 5) [root@xiaoliu lianxi]# echo $num 1 2 3 4 5 
四、read命令: 接收用户标准输入
1.用法:
[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]# 
五、shell的基本语法–while循环
1.定义:
讯享网1. while read line do 循环执行语句 done 2. while 条件: do 循环执行语句 done 
2.例子:
 #!bin/bash while read line do echo "这一行为"$line done < test.txt #!bin/bash cat test.txt|while read line do echo "这一行为"$line done 注意:此语法中,while循环也支持breakcontinue 
3.小练习:
讯享网需求: #有一个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 
六、shell基本语法–if语句
1.if语句的三种格式
1. if 条件 then 执行语句 fi 2. if 条件 then 执行语句 else 执行语句 fi 3. if [ command ];then 符合该条件执行的语句 elif [ command ];then 符合该条件执行的语句 else 符合该条件执行的语句 fi 
2.[ ]表示条件测试。注意这里的空格很重要。要注意在’[‘后面和’]'前面都必须要有空格。

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来合并两个条件 
3.整数类型的比较:
 if [ 123 -gt 22 ] then echo "大于" else echo "小于" fi if (( 123 > 22 )) then echo "大于" else echo "小于" fi 
4.小数运算:
讯享网 [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.整数运算

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 
6.一个[]和[[]]的区别:
讯享网[] 碰到空白会进行分词 [[]] 引号内的字符串不会进行分词 
 [root@xiaoliu shell_test]# name="sc tl" [root@xiaoliu shell_test]# [ $name == "sc tl" ] -bash: [: 参数太多 [root@xiaoliu shell_test]# [[ $name == "sc tl" ]] 
七、在centos里面同步时间
讯享网1.安装chrony软件 yum install -y chrony 2.重启整个服务 systemctl restart chronyd 3.设置开机自启动 systemctl enable chronyd 
八、case语句
1、case语句的结构:
case语句: case $变量 in value1) 语句体 ;; value2) 语句体 ;; *) 语句体 ;; esac 
2、小练习

用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 
九、shell里面的数组
1、定义:使用圆括号,中间以空格作为分隔符
#定义一个数组 [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 
十、在shell里产生随机数
1、用到了RANDOM函数,范围是0-32767:
讯享网 [root@xiaoliu lianxi]# echo $RANDOM 28727 
2、产生10以内的随机数
 [root@xiaoliu lianxi]# echo $(( $RANDOM%10 )) 6 
3、产生150-200之间的随机
讯享网 [root@xiaoliu lianxi]# echo $(( $RANDOM%50+150 )) 165 
4、小练习
随机产生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 
小讯
上一篇 2025-01-11 12:50
下一篇 2025-02-21 15:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/36832.html