shell脚本

认识shell

若如初见. 提交于 2020-01-14 17:56:24
认识shell 一、由来 第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh !而后 来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh !由于在学术 界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重 要而且流传很广的 shell 之一 。 二、现状 /bin/sh (已经被 /bin/bash 所取代) /bin/bash (就是 Linux 默认的 shell) /bin/tcsh (整合 C Shell ,提供更多的功能) /bin/csh (已经被 /bin/tcsh 所取代) 三、默认shell 当我们登录系统会获取默认的shell来进行工作,默认的shell记录在/etc/passwd里 [root@test ~]# vim /etc/passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin

shell学习-常用语句

随声附和 提交于 2020-01-14 16:14:03
为什么使用shell 可以快速、简单的完成编程,实现自己的想法。Shell非常适合编写小的工具,因为小工具更强调的是易于配置、维护、移植等,而不是执行效率。 当自己的想法确实有必要进行优化,有必要让它更容易修改以及修正设计目的时,可以将shell编写的工具重新用C、C++/python等语言重新实现。 常见的shell有bash/csh/sh等 管道和重定向 ls -al > lsoutput.txt #将ls命令输出的内容重定向到txt文件 在>前加数字 0 1 2 分别代表输入、标准输出、错误输出 参数2可以将错误输出到文件 而标准输出的内容将显示在屏幕上 >> #将输出添加到文件 丢弃不需要保存的输出的方法 Kill -l 1234 >/dev/null 2>&1 #将标准输出与错误输出都丢弃到系统垃圾箱 | 管道 用来连接进程 通过管道连接的进程可以同时运行,并自动协调数据流 1 Ps > psout.txt #输出ps内容到psout.txt 2 Sort psout.txt > psout.out #对psout.txt内容进行排序 输出到psout.out中 管道写法 1 Ps | sort | pssort.out #将ps内容排序后输出 自动搜索文件夹下 所有文件中包含的 某字符串 More $(grep -l POSIX *) #在当前文件夹下的文件中

使用shell脚本,nmap自动扫描,并使用tcpdump自动抓包

落爺英雄遲暮 提交于 2020-01-14 16:03:56
使用shell脚本,nmap自动扫描,并使用tcpdump自动抓包 (1)首先编写shell脚本(script01 脚本的名字,后面会用到) 根据自己需求可进行修改 #!/bin/bash port=$1 shift for ip in $* do nmap -Pn -A -p $port "$ip" -oG $ip.txt tcpdump -A -i eth0 tcp port $port -c 1 and host $ip -w $ip.cap -v done (2)调用masscan扫描的IP List 由于masscan扫描的结果需要进行预处理 将其只变为IP,将前面的这些东西删去,只留下IP (3)通过shell脚本自动扫描抓包任务 bash script01 554 $(cat 1.txt) 554是我们选择的端口号,也就是554将赋值给shell脚本中的$port 554是我们选择的端口号,也就是554将赋值给shell脚本中的$port $(cat 1.txt)会将我们的IP挨个输入到shell脚本中的$IP变量 来源: CSDN 作者: The_North 链接: https://blog.csdn.net/LoveStarbucks/article/details/103913183

Linux source命令

空扰寡人 提交于 2020-01-14 13:23:39
Linux source命令: 通常用法:source filepath 或 . filepath 功能:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。 source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。这从用法中也能看出来。 source filepath 与 sh filepath 、./filepath的区别 : 当shell脚本具有可执行权限时,用sh filepath与./filepath是没有区别的。./filepath是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。 sh filepath 会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell,除非使用export。 source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行

shell 报错:syntax error: unexpected end of file

最后都变了- 提交于 2020-01-14 11:57:26
有时执行脚本时会报错: [root@host1 shell]# sh -x test.sh + $'\r' : command not found test.sh: line 37: syntax error: unexpected end of file 原因可能是: 文本编辑是在windows下通过记事本或其它编辑器编写的这个文件,运行 在cygwin模拟LINUX软件环境下。 解决思路: DOS下文件和Linux下文件格式差异问题导致的。 DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。 【在windows里,换行用的两个符号,回车\r,换行符号\n, 在linux下只需一个符号\n就可以了 .】 DOS格式的文本文件在Linux下,用较低版本的vi打开时行尾会显示^M,当然也有可能看不到,但是在vi的时候,会在下面显示此文件的格式,"M.txt" [dos] 8L, 72C表示是一个dos文件格式。 解决方案: 使用下面的命令将文件格式设置为unix格式即可解决上述错误 vi test.sh :set fileformat=unix :wq 有时执行脚本时会报错: [root@host1 shell]# sh -x test.sh + $'\r' : command not

shell脚本设置钉钉告警模板

走远了吗. 提交于 2020-01-14 11:38:06
shell脚本模板 #!/bin/bash source ~/.bash_profile logfile=/tmp/rsync_dags.log time=$(date "+%Y-%m-%d %H:%M:%S") webhook='https://oapi.dingtalk.com/robot/send?access_token=4e13850af53becaa396694e4dq076d7feeecd7161c1ae3fec73036f263eb394c' ###webhook这个就是图五中要求复制下来的url host='spark001' 报警函数: function SendMsgToDingding() { curl $webhook -H 'Content-Type: application/json' -d " { 'msgtype': 'text', 'text': { 'content': ' 时间:$time 服务器:$host 告警信息:rsync error报错$errorcount次 报错日志路径:[/tmp/rsync_dags.log] 报错脚本:[/home/admin/program/airflow/rsync_dags.sh] 请马上处理!!!' #####content里的内容根据自己的报警内容编辑 }, 'at': { 'isAtAll':

linux下的source命令

£可爱£侵袭症+ 提交于 2020-01-14 02:47:01
Linux Source命令及脚本的执行方式解析 当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用 source 命令,如:source /etc/profile 对source进行了 学习 ,并且用它与sh 执行脚本进行了对比,现在总结一下。 source命令: source命令也称为“ 点命令 ”,也就是一个点符号(.),是bash的内部命令。 功能:使 Shell 读入指定的Shell程序文件并依次执行文件中的所有语句 source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。 用法: source filename 或 . filename source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。 source filename 与 sh filename 及./filename执行脚本的区别在那里呢? 1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。 2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句

shell脚本之while for if 语句和编写计划任务

陌路散爱 提交于 2020-01-14 02:44:08
关于while循环: while do done 例如 1、关于内存的实时操作: (1) 、vim a.sh (2)、输入以下while循环 (3)、./a.sh执行脚本 2、自加一的操作: (1)、vim b.sh (2)、先赋值xyy=1,再输入当xyy<=10时,则输出xyy的值,并且执行加1的命令(即xyy++),直至等于10为止,最后输出每次的结果 (3)、./b.sh执行脚本 3、关于登录循环的操作: (1)、vim 2.sh (2)、请输入用户名和密码,如果匹配账号密码正确的话,则输出登录成功,如果账号密码不正确的话,则输出,账号和密码是错误的 (3)、./2.sh执行脚本 关于for语句: for i in { } do done 例如: 1、从1-100里取值,并将取到的值挨个输出: (1)、vim 3.sh (2)、in表示从{ }里面取值给i (3)、./3.sh执行脚本 2、可以ping IP地址,查看有哪些可以使用: (1)、vim 3.sh (2)、in表示从{ }里面取值给i (3)、./3.sh执行脚本 关于if语句 例如: 启动nginx服务 (1)、vim 4.sh (2)、chmod +x 4.sh(给4.sh可执行的权限) (3)、./4.sh执行脚本 关于编写任务计划:crontab命令编写 crontab命令编写计划任务 语  法

shell练习题

雨燕双飞 提交于 2020-01-14 00:19:40
计算器 calc.sh #!/bin/bash echo " $* = $(( $ * )) " 比较整数大小 #!/bin/bash read -a num -p "请输入两个整数: " [ ${#num[*]} -eq 2 ] || { echo "参数不是两个" exit 5 } [ [ " ${num[0]} " = ~ ^ [ 0-9 ] +$ ] ] || { echo " ${num[0]} 不是数字" exit 1 } [ [ " ${num[1]} " = ~ ^ [ 0-9 ] +$ ] ] || { echo " ${num[1]} 不是数字" exit 2 } if [ ${num[0]} -gt ${num[1]} ] ; then echo " ${num[0]} > ${num[1]} " elif [ ${num[0]} -eq ${num[1]} ] ; then echo " ${num[0]} = ${num[1]} " else echo " ${num[0]} < ${num[1]} " fi 判断输入是整数 function isnum ( ) { NUM = $1 if [ [ $NUM = ~ ^ [ 0-9 ] +$ ] ] ; then echo $NUM is num else echo $NUM is not num fi }

[Shell] 函数的应用

醉酒当歌 提交于 2020-01-13 17:44:05
shell中函数的定义格式如下: [ function ] funname [()] { action; [return int;] } 说明: 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255 举例说明: 不带参数的函数: demoFunc(){ #定义函数 echo "这是第1个shell函数" } echo "-------函数开始执行------" demoFunc #执行函数 echo "-------函数执行完毕------" 执行效果: $ sh testfunc.sh -------函数开始执行------ 这是第1个shell函数 -------函数执行完毕------ 函数返回值在调用该函数后通过 $? 来获得。 注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。 带多个返回值的函数: test(){ echo 100 #返回100 echo 200 #返回200 } a=$(test) echo $a 执行效果: sh testfunc.sh 100 200 带参数的函数: funWithParam(