超騷银語:超级性感的银色语言騷話:性感的对话壞姐姐:坏坏的姐姐壞壞:非常坏未展示:不曾展示过的賓館:宾馆同事:
【转载搬运】超騷银語騷話 壞姐姐 壞壞 未展示 賓館和同事經典故事 [1V+1.1GB][百度盘] 大家好...
2023-11-29
4.1.1 选择执行if语句
格式:
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ elseCOMMANDS; ] fi单分支
if 判断条件;then 条件为真的分支代码fi双分支
if 判断条件; then 条件为真的分支代码else 条件为假的分支代码fi多分支
if 判断条件1; then 条件1为真的分支代码elif 判断条件2; then 条件2为真的分支代码elif 判断条件3; then 条件3为真的分支代码...else 以上条件都为假的分支代码fi说明:
多个条件时,逐个条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
if 语句可嵌套
范例:
#根据命令的退出状态来执行命令if ping -c1 -W2 station1 &> /dev/null; then echo 'station1 is UP' elif grep -q 'station1' ~/maintenance.txt; then echo 'station1 is undergoing maintenance'else echo 'station1 is unexpectedly DOWN!' exit 1fi范例:
[root@centos8 ~]#cat if_bmi.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2019-12-25#FileName: if_bmi.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2019 All rights reserved#********************************************************************read -p "请输入身高(m为单位): " HIGHif [[ ! "$HIGH" =~ ^[0-2].?[0-9]{,2}$ ]];then echo "输入错误的身高"; exit 1; firead -p "请输入体重(kg为单位): " WEIGHTif [[ ! "$WEIGHT" =~ ^[0-9]{1,3}$ ]];then echo "输入错误的体重"; exit 1; fiBMI=`echo $WEIGHT/$HIGH^2|bc`if [ $BMI -le 18 ] ;then echo "你太瘦了,多吃点"elif [ $BMI -lt 24 ] ;then echo "身材很棒!"else echo "你太胖了,注意节食,加强运动"fi4.1.2 条件判断case语句
格式:
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esaccase 变量引用 inPAT1) 分支1 ;;PAT2) 分支2 ;;...*) 默认分支 ;;esaccase支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
|: 或,如 a或b
范例:
[root@centos8 script40]#cat case_yesorno.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2019-12-25#FileName: case_yesorno.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2019 All rights reserved#********************************************************************read -p "Do you agree(yes/no)? " INPUTINPUT=`echo $INPUT | tr 'A-Z' 'a-z'`case $INPUT iny|yes) echo "You input is YES" ;;n|no) echo "You input is NO" ;;*) echo "Input fales,please input yes or no!"esac[root@centos8 script40]#cat case_yesorno2.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2019-12-25#FileName: case_yesorno.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2019 All rights reserved#********************************************************************read -p "Do you agree(yes/no)? " INPUTcase $INPUT in[yY]|[Yy][Ee][Ss]) echo "You input is YES" ;;[Nn]|[Nn][Oo]) echo "You input is NO" ;;*) echo "Input fales,please input yes or no!"esac练习
4.2.1 循环执行介绍

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
循环次数事先已知
循环次数事先未知
常见的循环的命令:for, while, until
4.2.2 for循环
格式1:
for 变量名 in 列表;do 循环体done执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束
for循环列表生成方式:
{start..end}$(seq [start [step]] end)$(COMMAND)范例: 九九乘法表
#!/bin/bashfor i in {1..9};do for j in `seq $i`;do echo -e "${j}x${i}=$[i*j]tc" done echodone范例:生产案例
[root@centos8 ~]#cat /data/script40/for_rename.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: /data/script40/for_rename.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************DIR=/data/testcd $DIRfor FILE in * ;do PRE=`echo $FILE | sed -nr 's/(.*).([^.]+)$/1/p'`# SUFFIX=`echo $FILE | sed -nr 's/(.*).([^.]+)$/2/p'` mv $FILE $PRE.bakdone范例:M37期面试题,要求将目录YYYY-MM-DD/中所有文件,移动到YYYY-MM/DD/下
#1 yyyy-mm-dd10.sh 创建YYYY-MM-DD,当前日期一年前365天到目前共365个目录,里面有10个文件,$RANDOM.log[root@centos8 ~]#cat dir20.sh#!/bin/bashfor i in {1..365};do DIR=`date -d "-$i day" +%F` mkdir $DIR cd $DIR for n in {1..10};do touch $RANDOM.log done cd ..done#2 移动到YYYY-MM/DD/下 #!/bin/bash#DIR=/data/testcd $DIRfor DIR in * ;do YYYY_MM=`echo $DIR |cut -d"-" -f1,2` DD=`echo $DIR |cut -d"-" -f3` [ -d $YYYY_MM/$DD ] || mkdir -p $YYYY_MM/$DD &> /dev/null mv $DIR/* $YYYY_MM/$DDdone格式2
双小括号方法,即((…))格式,也可以用于算术运算,双小括号方法也可以使bash Shell实现C语言风格
的变量操作
I=10;((I++))
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))do 循环体done说明:
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
范例:
#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: for_sum2.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************for((sum=0,i=1;i<=100;sum+=i,i++));do truedoneecho $sum范例:九九乘法表
#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: for_99_2.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************for ((i=1;i<10;i++));do for((j=1;j<=i;j++));do echo -e "${j}x${i}=$[i*j]tc" done echo done练习:用 for 实现
10、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少?
4.2.3 while循环
格式:
while CONDITION; do 循环体done说明:
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环,因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
范例:
#配置发邮件的邮箱[root@centos8 ~]#cat .mailrc set from=29308620@qq.comset smtp=smtp.qq.comset smtp-auth-user=29308620@qq.comset smtp-auth-password=esvnhbnqocirbicfset smtp-auth=loginset ssl-verify=ignore[root@centos8 ~]#cat while_diskcheck.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: while_diskcheck.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reservedWARNING=80while :;do USE=`df | sed -rn '/^/dev/sd/s#.* ([0-9]+)%.*#1#p' |sort -nr|head -n1` if [ $USE -gt $WARNING ];then echo Disk will be full from `hostname -I` | mail -s "disk warning"29308620@qq.com fi sleep 10done练习:用while实现
无限循环
while true; do 循环体done4.2.4 until循环
格式:
until CONDITION; do 循环体done说明:
进入条件: CONDITION 为false
退出条件: CONDITION 为true
无限循环
until false; do 循环体Done4.2.4 循环控制语句 continue
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
格式:
while CONDITION1; do CMD1 ... if CONDITION2; then continue fi CMDn ...done范例:
[root@centos8 script40]#cat continue_for.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: continue_for.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************for ((i=0;i<10;i++));do for((j=0;j<10;j++));do [ $j -eq 5 ] && continue 2 echo $j done echo ---------------------------done[root@centos8 script40]#bash continue_for.sh012340123401234012340123401234012340123401234012344.2.5 循环控制语句 break
break [N]:提前结束第N层整个循环,最内层为第1层
格式:
while CONDITION1; do CMD1 ... if CONDITION2; then break fi CMDn ...done范例:
[root@centos8 script40]#cat break_for.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: continue_for.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************for ((i=0;i<10;i++));do for((j=0;j<10;j++));do [ $j -eq 5 ] && break echo $j done echo ---------------------------done范例:
[root@centos8 script40]#cat break_for.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: continue_for.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************for ((i=0;i<10;i++));do for((j=0;j<10;j++));do [ $j -eq 5 ] && break 2 echo $j done echo ---------------------------done[root@centos8 script40]#bash break_for.sh01234范例:
[root@centos8 script40]#cat menu.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: menu.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************sum=0COLOR='echo -e 33[1;31m'COLOR2='echo -e 33[1;32m'END="33[0m"while true;doecho -e "33[33;1mc"cat <<EOF1) 鲍鱼2) 满汉全席3) 龙虾4) 燕窝5) 帝王蟹6) 退出EOFecho -e "33[0m"read -p "请点菜: " MENUcase $MENU in1|4) $COLOR'菜价: $10'$END let sum+=10 ;;3|5) $COLOR'菜价: $20'$END let sum+=20 ;;2) $COLOR'菜价: $1000'$END let sum+=1000 ;;6) $COLOR2"你点的菜总价格是 $sum"$END break ;;*) echo "点错了,没有这道菜" ;;esac$COLOR2"你点的菜总价格是 $sum"$ENDdone范例:
[root@centos8 script40]#cat guess.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: guess.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************NUM=$[RANDOM%10]while read -p "输入 0-9 之间的数字: " INPUT ;do if [ $INPUT -eq $NUM ];then echo "恭喜你猜对了!" break elif [ $INPUT -gt $NUM ];then echo "数字太大了,重新猜!" else echo "数字太小了,重新猜!" fidone4.2.6 循环控制 shift 命令
shift [n] 用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到 shift
范例:doit.sh
#!/bin/bash# Name: doit.sh# Purpose: shift through command line arguments# Usage: doit.sh [args]while [ $You can't use 'macro parameter character #' in math mode# -gt 0 ] # or (( $# > 0 ))do echo $* shiftdone./doit.sh a b c d e f g h范例:示例:shift.sh
#!/bin/bash#step through all the positional parametersuntil [ -z "$1" ] do echo "$1" shiftdoneecho ./shfit.sh a b c d e f g h范例:
[root@centos8 script40]#vim shift_batch_user.sh #!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: shift_batch_user.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************if [ $# -eq 0 ];then echo "Usage: `basename $0` user1 user2 ..." exitfi while [ "$1" ];do if id $1 &> /dev/null;then echo $1 is exist else useradd $1 echo "$1 is created" fi shiftdoneecho "All user is created"[root@centos8 script40]#bash shift_batch_user.shUsage: shift_batch_user.sh user1 user2 ...[root@centos8 script40]#bash shift_batch_user.sh tom alice jacktom is existalice is existjack is createdAll user is created练习
4.2.7 while read 特殊用法
while 循环的特殊用法,遍历文件或文本的每一行
格式:
while read line; do 循环体done < /PATH/FROM/SOMEFILE说明:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
范例:
[root@centos8 ~]#echo magedu | read X ; echo $X[root@centos8 ~]#echo magedu | while read X ; do echo $X;donemagedu[root@centos8 ~]#echo magedu | { read X ; echo $X; }magedu[root@centos8 ~]#echo magedu | ( read X ; echo $X )magedu[root@centos8 ~]#echo mage wang zhang | ( read X Y Z; echo $X $Y $Z )mage wang zhang[root@centos8 ~]#echo mage wang zhang | while read X Y Z; do echo $X $Y $Z;donemage wang zhang范例:
cat while_read_diskcheck.sh#!/bin/bashWARNING=80MAIL=root@wangxiaochun.comdf |sed -nr "/^/dev/sd/s#^([^ ]+) .* ([0-9]+)%.*#1 2#p"|while read DEVICE USE;do if [ $USE -gt $WARNING ] ;then echo "$DEVICE will be full,use:$USE" | mail -s "DISK WARNING" $MAIL fidone范例:
cat while_read_check_dos.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: while_read_check_dos.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************lastb | sed -rn '/ssh:/s@.* ([0-9.]{1,3}{3}[0-9]{1,3}) .*@1@p'|sort |uniq -c|while read count ip ;do if [ $count -gt 3 ];then iptables -A INPUT -s $ip -j REJECT fi done范例:
cat while_read_passwd.sh#!/bin/bash##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2020-01-03#FileName: while_read_passwd.sh#URL: http://www.magedu.com#Description: The test script#Copyright (C): 2020 All rights reserved#********************************************************************while read line ;do if [[ "$line" =~ /sbin/nologin$ ]] ;then echo $line | cut -d: -f1,3 fi done < /etc/passwd4.2.8 select 循环与菜单
格式:
select variable in list ;do 循环体命令done说明:
范例:
cat select.sh #!/bin/bash#sum=0PS3="请点菜(1-6): "select MENU in 北京烤鸭 佛跳墙 小龙虾 羊蝎子 火锅 点菜结束;docase $REPLY in1) echo $MENU 价格是 100 let sum+=100 ;;2) echo $MENU 价格是 88 let sum+=88 ;;3) echo $MENU价格是 66 let sum+=66 ;;4) echo $MENU 价格是 166 let sum+=166 ;;5) echo $MENU 价格是 200 let sum+=200 ;;6) echo "点菜结束,退出" break ;;*) echo "点菜错误,重新选择" ;;esacdoneecho "总价格是: $sum"
以上内容就是为大家推荐的shell脚本语言的优势(shell脚本基本语法)最佳回答,如果还想搜索其他问题,请收藏本网站或点击搜索更多问题
内容来源于网络仅供参考版权声明:所有来源标注为小樱知识网www.xiaoyin02.com的内容版权均为本站所有,若您需要引用、转载,只需要注明来源及原文链接即可。
本文标题:shell脚本语言的优势(shell脚本基本语法)
本文地址:https://www.xiaoyin02.com/shcs/115386.html
相关文章
【转载搬运】超騷银語騷話 壞姐姐 壞壞 未展示 賓館和同事經典故事 [1V+1.1GB][百度盘] 大家好...
2023-11-29
热点文章
2021年独生子女补贴新政策是真的吗(独生子女证有有效期吗)
2021年国庆节阅兵仪式几点开始几点结束(2021年国庆节还有阅兵吗)
鼠目寸光一点红是什么生肖动物(鼠目寸光一点红)指什么生肖,紧密
k0到k9的玩法大全(强制gc的玩法和注意事项)
入土为安是什么生肖《入土为安》打一个生肖动物,词语解释
浙江12月底全面停工是真的吗(浙江什么时候放假停工)
如何做t(t怎么把p做哭)
北京口碑最差的三甲医院(北京301医院最擅长什么)