shell脚本

shell脚本编程高级篇

徘徊边缘 提交于 2020-03-21 12:40:58
SHELL脚本编程进阶 循环执行:简单来说就是把一些指令重复循环。 循环代码具体的指令有三种: for , while , until其中for, while用的最多。 for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询。 for循环语法:在shell编程中 for,in,do,done。这些都是他的关键字,其中循环的指零就放在do和done之间。 WORDS决定了循环次数。 循环的次数由in 后面跟的WORDS(字符串)的数量决定。字符串的个数决定了do和done之间的指令执行的次数。 $ :for认为是一个整体 br/>$@:for认为是独立的参数 for循环逻辑:↓↓ :这条命令意思是,将i变量为1 22 33 等于说i同时等于这3个变量然后用到$i把变量显示出来第一次i就是1第二次i就是22第三次i就是333这就是for循环的逻辑。 :还可以使用花括号或字母一次性显示完。 for脚本编辑语法:,脚本意思是i变量为arg而$@是独立的一个整体执行为脚本后面跟123代表arg is 独立的123。 :这是重复创建10次用户的意思i变量为{1..10}这个范围 :这是让FILE变量为userlist.txt这个文件然后执行这个文件里有多少用户,在来循环多少次。 :不用创建脚本也可以在外执行for结尾必须使用;隔开done

shell写定时任务

南楼画角 提交于 2020-03-21 10:10:46
自己记录下-----使用脚本定时每几分钟执行一次任务: #!/bin/bash #打印当前地址 echo $(dirname $0) #获取父级路径 path=$(dirname $(dirname $PWD)) echo ${path} #执行的任务 program=aa.app step=5 #获取当前时间 #perDate=$(date "+%Y%m%d") #获取一天后的时间 afterdata=$(date -d +1day "+%Y%m%d") #每5分钟仅仅执行一次,设置标志位 onceflag=0 echo 'task schedule time Waiting to run (once per 5min)...' #死循环,检查当前时间段分钟数符合条件,则开始执行程序 while true ; do #获取当前分钟数,date获取当前日期,%M来获取当前分钟数 presentminutes=$(date "+%M") #expr 是一款表达式计算工具, 注意使用的是反引号 ` 而不是单引号 ' if [ `expr $presentminutes % $step` -eq 0 ] then if [ $onceflag -eq 0 ] then echo 'now minute is '$presentminutes'' onceflag=1 echo '已执行:

WinDbg文件关联和资源管理器上下文菜单

这一生的挚爱 提交于 2020-03-21 08:27:05
很长一段时间以来,我有一个注册表文件来为WinDbg创建上下文菜单项。这些条目允许您选择x86或x64调试器。在公司内部,我有另一个版本的注册表文件,其中包含了私有符号服务器的另外两个上下文菜单项。你可以在这个截图中看到我在内部添加的所有4个选项。 注意,注册表文件假定WinDBG安装在c:\调试器_x86和c:\调试器中(分别用于x86和AMD64调试器)。 注册表项传入Microsoft公共符号服务器(http://msdl.Microsoft.com/download/symbols)和Microsoft专用符号服务器的符号路径。在这两种情况下,符号都通过SRV*链接在本地缓存(例如c:\符号)。与体系结构条目非常相似,这种技术为您提供了一种在公共和私有符号之间切换的快速方法(在我的例子中)。符号路径的传递,而不是使用-NT_symbol_path环境变量,是绕过WinDBG所做的具体化的唯一方法。如果设置了环境变量,则该变量将位于传递的符号路径的前面。这意味着仍然可以使用环境变量路径而不是传递路径。我承认,这只是一个问题,为人们需要支持的两个符号商店和绝大多数人,环境变量是一个更好的方式去做。如果这样做,只需删除命令行的-y部分。 注册表文件为所有转储变量建立关联,包括反射转储文件(*.ini)。反射转储可以使用ProcDump和-r开关(例如ProcDump.exe-r

Linux Shell编程第5章——文件的排序、合并和分割

孤人 提交于 2020-03-21 07:42:48
目录 sort命令 sort命令的基本用法 uniq命令 join命令 cut命令 paste命令 split命令 tr命令 tar命令 sort命令 sort命令是Linux系统一种排序工具,它将输入文件看作由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符为定界符。sort命令与awk类似,可将记录分成多个域来处理,默认的域分隔符是空格符,域分隔符也可由用户指定。sort命令的基本格式如下: sort [选项] [输入文件] 常用sort命令选项及其意义如下: 选项 意义 -c 测试文件是否已经被排序 -k 指定排序的域 -m 合并两个已排序的文件 -n 根据数字大小进行排序 -o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分隔符 -u 去除结果中的重复行 sort命令的基本用法 1. -t选项 sort命令是分域对文件进行排序的,默认的域分隔符是空格符,-t选项可用于设置分隔符。下面看一个例子,新建一个CARGO.db的文件,用于记录笔记本品牌、产地、价格、年代、型号等信息,各域间用冒号分隔。 $ cat CARGO.db ThinkPad:USA:14000:2009:X301 ThinkPad:HongKong:10000:2008:T400 ThinkPad:USA:8000:2007:X60 HP

【shell】awk引用外部变量

戏子无情 提交于 2020-03-19 02:59:21
在使用awk的过程中,经常会需要引用外部变量,但是awk需要使用单引号将print包起来,导致print后的$引用无效,可以采用下面的方式 例如: #!/bin/bash a="line1 line2 line3" for ((i=1;i<=3;i++)) do echo $a | awk '{print $i}' done 上面这个脚本运行的时候,会输出三次line1 line2 line3,而不是我们想要的每次输出一列。原因是$i没有被替换成$1,$2,$3.解决方案如下 #!/bin/bash a="line1 line2 line3" for ((i=1;i<=3;i++)) do echo $a | awk '{print $"'$i'"}' done 这样,脚本就会逐列进行输出了。 来源: https://www.cnblogs.com/zhenglisai/p/7201287.html

shell中wait命令详解

时光总嘲笑我的痴心妄想 提交于 2020-03-19 00:21:13
wait命令介绍   wait [作业指示或进程号]   1.等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0.   2.如果是shell中等待使用wait,则不会等待调用函数中子任务。在函数中使用wait,则只等待函数中启动的后台子任务。   3.在shell中使用wait命令,相当于高级语言里的多线程同步。   语法   wait(参数) 使用 wait 是在等待上一批或上一个脚本执行完(即上一个的进程终止),再执行wait之后的命令。   参数   进程或作业标示:指定进程号或者作业号。   实例   1.使用wait等待所有子任务结束。   [plain] view plain copy#!/bin/bash   sleep 10 &   sleep 5&   wait #等待10秒后,退出   [plain] view plain copy#!/bin/bash   sleep 10 &   sleep 5&   wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出   2.在函数中使用wait   [plain] view plain copy#!/bin/bash   source ~/.bashrc   fun(){   echo "fun is

远程执行shell脚本

大憨熊 提交于 2020-03-18 18:18:14
背景: 需要ssh登录到远程机器上做测试 ssh登录到每台机器,执行相同的命令,特别麻烦,怎么才能省点事? 实现: 把命令写到脚本里,放在机器A上,然后使用如下命令即可。 ssh $ip -C "/bin/bash" < /home/test.sh 来源: https://www.cnblogs.com/liurong07/p/12518945.html

青蛙学Linux—shell

£可爱£侵袭症+ 提交于 2020-03-18 14:04:04
1、shell简介 shell俗称“壳”,它围绕在系统内核之外,是为用户提供与操作系统内核交互的软件。shell可以分为图形界面shell(GUI shell)和命令行shell(CLI shell,传统意义上的shell)。 shell提供了用户与操作系统之间通讯的方式。这种通讯可以以交互方式(键盘输入命令并立即得到响应)和非交互方式(shell script)执行。 Linux下有多种shell可以使用,除了默认的Bourne Again shell(bash),还有C shell(csh)、Korn shell(ksh)、Bourne shell(sh)和Tenex C shell(tcsh)等。每个shell的功能基本相同,但各有优缺点,现在在Linux发行版上使用的一般都是bash。 shell中定义了一些内置命令,同时Linux系统上还有很多可执行文件,这些可执行文件也可以作为shell命令来执行。shell的内置命令由shell自身来解释执行,所以执行的速度要比系统的可执行文件要快;系统的可执行文件只有当被调用的时候,才装入内存执行。 shell执行命令的具体过程为:用户在命令行输入命令提交后,shell首先检测该命令是否为内置命令,如果是,则直接通过shell的解释器解释并提交内核执行;如果不是

编写 Shell 脚本的最佳实践

断了今生、忘了曾经 提交于 2020-03-18 04:38:56
转自: http://kb.cnblogs.com/page/574767/ 前言   由于工作需要,最近重新开始拾掇shell脚本。虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看。而且当我在看其他人写的脚本的时候,总觉得难以阅读。毕竟shell脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用。因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的main函数,不忍直视。同时,由于历史原因,shell有很多不同的版本,而且也有很多有相同功能的命令需要我们进行取舍,以至于代码的规范很难统一。   考虑到上面的这些原因,我查阅了一些相关的文档,发现这些问题其实很多人都考虑过,而且也形成了一些不错的文章,但是还是有点零散。因此我就在这里把这些文章稍微整理了一下,作为以后我自己写脚本的技术规范。   代码风格规范   开头有“蛇棒”   所谓shebang其实就是在很多脚本的第一行出现的以”#!”开头的注释,他指明了当我们没有指定解释器的时候默认的解释器,一般可能是下面这样: #!/bin/bash   当然,解释器有很多种,除了bash之外,我们可以用下面的命令查看本机支持的解释器: $ cat /etc/shells #/etc/shells: valid login shells /bin/sh /bin/dash

linux shell实现守护进程 看门狗 脚本

别来无恙 提交于 2020-03-17 19:44:25
嵌入式初学者,第一次上传代码。昨天做了一个udhcpd与udhcpc的守护,目前只会用shell模仿编写,还有什么方法可以做守护呢? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #! /bin/sh #进程名字可修改 PRO_NAME=udhcpc WLAN=ra0 while true ; do # 用ps获取$PRO_NAME进程数量 NUM=` ps aux | grep ${PRO_NAME} | grep - v grep | wc -l` # echo $NUM # 少于1,重启进程 if [ "${NUM}" -lt "1" ]; then echo "${PRO_NAME} was killed" ${PRO_NAME} -i ${WLAN} # 大于1,杀掉所有进程,重启 elif [ "${NUM}" -gt "1" ]; then echo "more than 1 ${PRO_NAME},killall ${PRO_NAME}" killall -9 $PRO_NAME ${PRO_NAME} -i ${WLAN} fi # kill僵尸进程 NUM_STAT=` ps aux | grep ${PRO_NAME} | grep T |