当前位置: 首页 > Linux

Shell脚本

时间:2023-04-06 04:40:52 Linux

Shell终端解释器是人与计算机硬件之间的“翻译器”,是用户与Linux系统之间的沟通媒介。Shell脚本命令有两种工作模式:交互式和批处理。Interactive:批处理在用户输入命令后立即执行:用户编写一个完整的shell脚本,shell会一次性执行脚本中的命令。echo$SHELL#使用Bash作为命令行终端解释器结构1.第一行的脚本声明(#!)用于告诉系统使用哪个shell解释器来执行脚本2.注释信息(#)on第二行是脚本函数和一些命令的介绍信息3、后面的可执行语句就是通常的Linux命令执行方式1、bashexample.sh#使用解释器执行脚本2、./example#Executeby输入完整路径3、下面的可执行语句也是通常执行的linux命令变量预定义变量*位置变量:用于传递脚本参数*环境变量:保证操作系统运行的变量*自定义variable:用户自定义,variable用户编写的脚本shell的基本语法中可以使用的变量只能由大小写字母、数字和下划线组成。变量名不能以数字开头。变量可以存储数字或字符串。变量赋值等号两边不能有空格。字符串变量可以用单引号或双引号括起来。单引号:所见即所得,吃什么,拉什么,不解析变量,不知道加什么加双引号双引号解析变量调用方法:1.echo$applepen2.echo${apple}#推荐使用~~~~shell运算符运算符类型*算术运算符*关系运算符*布尔运算符*逻辑运算符*字符串运算符*文件测试运算符规则:*两边必须有空格运算符符号*特殊符号如*需要在前面加反斜杠*空格和特殊字符串需要用引号括起来命令:expr功能:求表达式的值语法:expr表达式#!/bin/bashi=1j=2加法=`expr$i+$j`减法=`expr$i-$j`乘法=`expr$j\*$j`除法=`expr$j/$i`mod=`expr$j%$i`echo"addition=${addition},subtraction=${subtraction},multiplication=${multiplication},division=${division},mod=${mod}"if[$i==$j]然后echo"i等于j"fiif[$i!=$j]thenecho"i不等于j"fi#!/bin/bashnum1=5num2=8if[$num1-eq$num2]thenecho"$num1等于$num2:num1等于num2"elseecho"$num1等于等于$num2:num1不等于num2"fiif[$num1-ne$num2]thenecho"Is$num1notequalto$num2:num1isnotequaltonum2"elseecho"Is$num1notequalto$num2:num1isequaltonum2"fiif[$num1-gt$num2]thenecho"Is$num1greaterthan$num2:num1大于num2"elseecho"$num1是否大于$num2:num1不大于num2"fiif[$num1-lt$num2]thenecho"$num1是否小于$num2:num1小于num2"elseecho"$num1是否小于$num2:num1不小于num2"fiif[$num1-ge$num2]thenecho"$num1是否大于或等于$num2:num1大于或等于num2"elseecho"$num1是否大于或等于$num2:num1小于num2"fiif[$num1-le$num2]thenecho"Is$num1lessthanorequalto$num2:num1islessthanorequaltonum2"elseecho"Is$num1lessthanorequalto$num2:num1isgreaterthannum2"fi#!/bin/bashnum1=3num2=23if[$num1!=$num2]thenecho"$num1!=$num2:num1不等于num2"elseecho"$num1!=$num2:num1等于num2"fiif[$num1-lt25-a$num2-gt15]thenecho"$num1islessthan25and$num2isgreaterthan15:returntrue"elseecho"$num1islessthan25and$num2is大于15:returnfalse"fiif[$num1-lt25-o$num2-gt25]thenecho"$num1islessthan25or$num2isgreaterthan25:returntrue"elseecho"$num1islessthan25或$num2大于25:returnfalse"fi#!/bin/bashapple="apple"pen="pen"if[$apple=$pen]thenecho"$apple=$pen:appleisequaltopen"elseecho"$apple=$pen:apple不等于pen"fiif[$apple!=$pen]thenecho"$apple!=$pen:apple不等于pen"elseechoo"$apple!=$pen:apple等于pen"fiif[-z$apple]thenecho"-z$apple:stringlengthis0"elseecho"-z$apple:stringlengthisnot0"fiif[-n"$apple"]thenecho"-n$apple:stringlengthisnot0"elseecho"-n$apple:stringlengthis0"fiif[$apple]thenecho"$apple:stringnotempty"elseecho"$apple:stringisempty"fi#!/bin/bashnum1=5num2=8if[[$num1-lt10&&$num2-gt5]]thenecho"returntrue"elseecho"returnfalse"fiif[[$num1-lt10||$num2-gt5]]thenecho"returntrue"elseecho"returnfalse"fi~cattestfile.sh#!/bin/bashfile="/root/testfile.sh"if[-r$file]thenecho"文件可读"elseecho"文件不可读"fiif[-x$file]thenecho"文件可执行"elseecho"文件不可执行"fiif[-w$file]thenecho"文件可写"elseecho"文件不可写"fiif[-f$file]thenecho"文件是普通文件"elseecho"文件不是普通文件"fiif[-s$file]thenecho"文件为空"elseecho"文件不为空"fiif[-d$file]thenecho"文件是目录"elseecho"文件不是目录"fi#!/bin/basha=10if[a>5]thenecho"aisgreaterthan5"fi#!/bin/bashping-c3-i0.2-W3$1&>/dev/nullif[$?-eq0];thenecho"Host$1ison-line"elseecho"Host$1isnoton-line"fi#!/bin/bashread-p"Enteryourscore(0-100):"GRADEif[$GRADE-ge85]thenecho"$GRADEisexcellent"elif[$GRADE-ge70]&&[$GRADE-ge84]thenecho"$GRADEispass"elseecho"$GRADEisFail"fi使用脚本中的read命令读取用户输入的密码值,然后赋值给PASSWD变量,并通过-p参数向用户显示提示信息,告诉用户输入的内容将作为账户密码脚本执行后会自动使用从列表文件users.txt中获取的所有用户名,然后使用“id用户名”命令一一查看用户信息,使用$?判断命令是否执行成功,或者是判断用户是否已经存在/dev/null是一个叫做linux黑洞的文件。将输出信息重定向到这个文件相当于删除数据(类似没有回收功能的垃圾桶),可以??让用户的screen窗口保持简短#!/bin/bashread-p"pleasewriteuserpassword:"PASSWDforUNAME在`catusers.txt`doid$UNAME&>/de/nullif[$?-eq0]thenecho"alreadyexist"elseuseradd$UNAME&>/dev/nullecho"$PASSWD"|passwd--stdin$UNAME&>/dev/nullif[$?-eq0]thenecho"$UNAME,创建成功"elseecho"$UNAME,创建失败"fifidone#!/bin/bashHLIST=$(cat~/iptables.txt)foripin$HLISTdoping-c3-i0.2-W3$ip&>/dev/nullif[$?-eq0]thenecho"host$ipison-line"elseecho"host$ipisnotonline"fidone#!/bin/bashPRICE=$(expr$RANDOM%1000)TIMES=0echo"实际价格oftheproductisbetween0-999:"whiletruedoread-p"Pleaseenterthepriceyouthink:"INTletTIMES++if[$INT-eq$PRICE]thenecho"恭喜你,你的第六感是正确的,正确的价格是:$PRICE"echo"你总共猜了$TIMES次"exitelif[$INT-gt$PRICE]thenecho"Theguessistoohigh"elseecho"Toolowand"fidone#!/bin/bashread-p"Pleaseenterancharacterandentertoconfirm:"KEYcase"$KEY"in[a-z][A-Z])echo"你输入的是字母";;[0-9])echo"你输入的是数字";;*)echo"你输入的其他字符"esaccasefile的test是根据指定的条件来判断文件是否存在或者是否满足权限。-d测试文件是否为目录类型-e测试文件是否存在-f判断是否为普通文件-r测试当前用户是否有读权限-w测试当前用户是否有写权限-x测试当前用户是否有权限执行[-d/etc/fstab]echo$?#$?变量显示上一条命令执行后的返回值[-e/dev/cdrom]&&echo"exist"#&&上一条命令执行成功,将执行下一条命令[$USER=root]||echo"user"#上一条命令执行失败,将执行下一条命令[$USER!=root]&&echo"root"||echo"user"#首先判断当前登录用户的USER变量名是否等于root,然后使用逻辑运算符"not"进行取反运算,效果就变成了判断当前登录是不是用户是非管理员用户?最后,如果条件为真,则根据逻辑“与”运算输出词根;否则,如果不满足条件,则通过逻辑“或”运算符输出user一词。整数比较运算符只能对数字进行运算,不能与字符串、文件等进行数字运算,也不能想当然地用日常生活中的等号、大于号、小于号等来判断.因为等号与赋值命令字符冲突,所以大于号和小于号分别与输出重定向命令字符和输入重定向命令字符冲突。运算符函数-eq等于-ne不等于-gt大于-lt小于-le是否等于或小于-ge是否大于等于freeMem=`free-m|grep内存:|awk'{print$5}'`#定义变量信息[$freeMem-lt1024]&&echo"insufficientmemory"字符串比较语句用于判断测试字符串是否为空,或者两个字符串是否相同。常用于判断变量是否未定义(即内容为空值)运算符函数=比较字符串内容是否相同!=比较字符串内容是否不同-z判断字符串内容是否为空[-z$string]echo$?