条件判断

if     条件1;then

COMMAND

elif  条件2;then

COMMAND

else

COMMAND(:)        :  表示pass  不执行任何命令

fi

读取用户输入在进行数据判断

   echo -n "输入你的数字: "
read userinput
expr $userinput+ &>/dev/null
if [ $? -ne ]; then
echo "必须输入数字!"
continue
else
COMMAND
fi

case 变量引用 in

PAT1)

分支1

;;

esac

变量名和变量引用的区别:  变量引用就是需要在变量名前面添加一个$,       name表示变量名     $name表示变量引用

并行执行shell命令  wait的作用是表示后台命令执行完毕后退出程序,默认后台程序结束后需要手动敲回车键才能退出程序

 net=172.17.
for i in {..};do
{ if ping -c1 -w1 $net.$i &> /dev/null ;then
echo $net.$i is up
else
echo $net.$i is down
fi; } &
done
wait

循环

for循环

for((  exp1; exp2; exp3  )); do COMMANDS; done

exp1 是循环的初始化语句 实际上不参与循环

exp3 相当于循环体中的最后一条语句

exp2 为循环条件的判断语句     每次执行循环体之前都必须先判断exp2的执行结果

 #!/bin/bash
declare -a array
for((i=;i<=;i++))
do
array[$i]=$((RANDOM%))
done MIN=${array[]}
MAX=${array[]} for num in ${!array[@]};do
echo $((array[${num}]))
if [[ ${MIN} -ge ${array[${num}]} ]];then
MIN=${array[${num}]}
fi
if [[ ${MAX} -le ${array[${num}]} ]];then
MAX=${array[${num}]}
fi done
echo "the min is $MIN"
echo "the max is $MAX"
 #!/bin/bash
declare -i min max
declare -a nums
for((i=;i<;i++));do
nums[$i]=$RANDOM
[ $i -eq ] && min=${nums[$i]} && max=${nums[$i]} && continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]}
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "all numbers are ${nums[*]}"
echo Max is $max
echo Min is $min
 #!/bin/bash
re=`wc -l $ | cut -d " " -f1`
echo $re
continue和break

continue 和 break 后面可以添加一个数字N,表示提前结束第N层的本轮循环从而直接进入下一轮的判断,最内层的循环为第1层

continue 2   or   break 3

循环控制shift命令

将参数列表向左移动,默认移动单位为1,移动后的参数会自动被删除.使用的场景:配合循环遍历逐个处理提供给执行脚本的位置参数

while循环的特殊用法

循环遍历文件或者命令的标准输出

  df | while read line;do
echo $line
done; while read line;do
echo $line
done < /root/file
select循环与菜单

select  variable  in  list

do

循环体命令

done

select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在 标准错误上,并显示 PS3 提示符,等待用户输入

用户输入菜单列表中的某个数字,执行相应的命令

用户输入被保存在内置变量 REPLY 中

信号捕捉trap

trap      '触发指令'     信号      自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作

trap  ''      信号       忽略信号的操作

trap  '-'     信号       恢复原信号的操作

使用 kill -l  查看所有能捕捉的信号数据

trap  "echo press ctrl+c"  2

kill -9 的信号无法被捕捉到

[root@iz2ze6e5pr6sbu9qxhzulaz ~]# kill -l
) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL ) SIGTRAP
) SIGABRT ) SIGBUS ) SIGFPE ) SIGKILL ) SIGUSR1
) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM
) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP
) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ
) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR
) SIGSYS ) SIGRTMIN ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX

父 shell 子 shell  export 与 变量传递

一般而言,在一个脚本里执行一个外部命令(普通的可执行文件)时,shell 会 fork 出一个子进程,然后再用 exec 来执行这个程序;但是,bash shell 的内置命令(builtin)却不会这样,它们是直接执行的。所以,等价的内置命令的执行速度会比执行外部命令要来的快

子 shell 对父 shell 里 export 出来的变量进行修改并不能影响到父 shell。这说明了,子 shell 只是在“导出变量列表“里对该变量进行了一个拷贝

子shell中export 出来的变量不能导出到父进程或者是父进程的环境里。一个自己称可以继承父进程的东西,而不能反过来去影响父进程

父子shell中的变量交换本质上是利用进程之间的通信方式来实现的

 #!/bin/bash
rm -f tmp.txt
df -h |grep '^/dev*' | while read line;do
name=`echo $line | cut -d" " -f1`
data=`echo $line | cut -d" " -f5`
echo $name-$data >> tmp.txt
done declare -A arr
while read line;do
key=${line%-*}
value=${line#*-}
arr[$key]=$value
done < tmp.txt echo ${!arr[@]}
echo ${arr[@]} [root@centos7 ~]# bash whiledf.sh
/dev/sda1 /dev/sda3 /dev/sda2
% % %
关于export

1.一个shell中的系统环境变量会被复制到子shell中(用export定义的变量);
    2.一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。
    3.不用export定义的变量只对该shell有效,对子shell也是无效的。

shell执行机制

用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序.

shell执行外部命令或运行shell脚本程序时,系统将创建一个子shell,然后在子Shell中执行此Shell脚本

一旦子Shell中的脚本执行完毕,此子Shell随即结束,返回到父Shell中,但不会影响父Shell原本的环境

shell脚本循环和信号的更多相关文章

  1. shell脚本-循环选择语句

    shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...

  2. 没事就要多做多练,Shell脚本循环例题做一做

    Shell脚本循环例题                 一.示例1                 二.示例2                 三.示例3                 四.示例4 ...

  3. 3.shell脚本循环试题

    shell脚本循环试题 1.计算从1到100所有整数的和 #!/bin/bash a=0 for i in {1..100} #1到100 #每次循环变量i的值也为循环次数 do a=$[ $a + ...

  4. shell脚本循环处理文件数据

    有一个日志文件为: # cat data.log 需要提取出里面的数据,写shell脚本实现这个功能: #!/bin/bash OLD=$IFS IFS=$'\n' for entry in $(ca ...

  5. shell脚本循环嵌套

    嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...

  6. shell脚本循环执行mysql语句

    参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...

  7. shell脚本--循环结构

    shell的循环结构有while和for两种 for循环 #!/bin/bash #文件名:test.sh i=4 for i in 2 4 6 8 10 do echo $i done echo $ ...

  8. [Shell] shell 脚本循环恢复的问题

    在一个shell脚本中,我大概执行了如下一个脚本: ...} do ...} do ...} do done done done 假设上面的sleep 10秒就是代表我的程序需要执行10秒之久.而现在 ...

  9. 使用shell脚本循环处理文本

    公司是使用puppet来进行配置管理, 某天修改完puppet后领导回复: 我们有一个文档cabinet.txt记录了物理机器所在的机柜, 除了文档里的其他机器都是虚拟机或云服务器, 对虚拟机的pup ...

随机推荐

  1. Kafka 2.0 ConsumerGroupCommand新功能

    一直觉得kafka-consumer-groups.sh的输出信息有点少,总算在2.0中得到了改善.新版本ConsumerGroupCommand增加了查看成员信息.组状态信息,算是弥补了之前的不足. ...

  2. M0 M4时钟控制(一)

    时钟控制器为整个芯片提供时钟源,包括系统时钟和所有外围设备时钟.该控制器还通过单独时钟的开或关,时钟源选择和分频器来进行功耗控制.在CPU使能低功耗PDEN(CLK_PWRCTL[7]) 位和Cort ...

  3. error: style attribute '@android:attr/windowEnterAnimation' not found.

    在Project/gradle.properties中添加 android.enableAapt2=false

  4. java保存动态代理生成的类的class文件

    启动时加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true

  5. Web(一)

    Tomcat 服务器       B/S 浏览器/服务器       C/S 客户端/服务器  URI :大 广 /项目名                      URL: 小  http://lo ...

  6. vins-mono代码分析

    vins-mono的关键帧选择策略 1 与前一帧的平均视差.如果跟踪特征的平均视差超过某个阈值,我们会将此图像视为关键帧. 2 另一个是跟踪质量.如果跟踪特征的数量低于一个阈值,我们把这一帧看做一个新 ...

  7. {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用

    MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...

  8. python中OrderedDict的使用

    很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集.集合),里面自带了一个子类 OrderedDict,实现了对字典对象 ...

  9. linux:基本指令ls、cd

    cd 指令  使用 cd 指令, 我们能在 Terminal 中轻松切换到不同的文件夹. 想从 Home 去 Documents 这个文件夹? 输入下面的命令就可以了. ~$ cd Documents ...

  10. 垃圾回收基本算法 内存管理 GC大统一理论

    <垃圾收集> (豆瓣) https://book.douban.com/subject/1157908/ 第1章 简介1.1 内存分配的历史1.1.1 静态分配1.1.2 栈分配1.1.3 ...