加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell脚本

发布时间:2020-12-15 21:38:42 所属栏目:安全 来源:网络整理
导读:? 信息同步: 一、常用的liunx命令选项 - a 显示所有对象 - c 生成一个计数 - d 指定一个目录 - e 扩展一个目录 - f 指定读入数据的文件 - h 显示命令帮助的信息 - i 忽略文本大小写 - l 产生输出的长格式版本 - n 使用非交互模式(批处理) - o 将所有输出

?

信息同步:

一、常用的liunx命令选项 -a 显示所有对象 -c 生成一个计数 -d 指定一个目录 -e 扩展一个目录 -f 指定读入数据的文件 -h 显示命令帮助的信息 -i 忽略文本大小写 -l 产生输出的长格式版本 -n 使用非交互模式(批处理) -o 将所有输出重定向到的指定的输出文件 -q 以安静模式运行 -r 递归的处理目录和文件 -s以安静模式运行 子主题 1
    -v 生成详细输出 -x 排除某个对象 -y 对所有问题回答yes 二、呈现数据 1,Linux标准文件描述3个 标准输入 STDIN 0 输入重定向符号 (<) exec 0< testfile ,exec命令将STDIN重定向到Linux系统中的文件 标准输出 STDOUT 1 输出重定向(>) 将数据追加到某个文件(>>) exec 1> testout exec 命令会启动一个新的shell并将STDOUT并将STDOUT文件描述符重定向到文件。 标准错误 STDERR 2 重定向错误(2>) exec 3> test13out,exec命令给输出分配文件描述符 >&3 exec 3>> test13out >&3 当出现 (&>)所有输出发送到同一位置 重定向 临时重定向 (>&2) 永久重定向(exec 2>testerr) 2,记录消息 tee filename ,tee命令相当于管道的T型接头。它将从STDIN过来的数据同时发往两处。一处是STDOUT,另一处是tee命令行所指定的文件名。 tee  -a filename,将数据追加到文件中,用-a选项 三、命令汇总 read -p "xxxx" answer break continue for
    if
    while
    until
    case
    
    echo
        echo -e ....tn...  输出转义字符 常用的转义字符 b 转义后相当于按退格键backspace,b后要有数据 c 不换行输出,在c后面不存在字符的情况下。 n 换行输出 f 或 v 换行,但是新行的开头位置连接着上一行的行尾 t 转义后表示插入tab,制表符 r 光标移至行首,但不换行,r以后的字符替换行首的相同数量的字符。  表示插入本身 echo  -n 表示不换行输出 四、控制脚本 1,处理信号 常用的Linux信号 信号1,值SIGHUP,挂起进程 信号2,值:SIGINT,终止进程 信号3,值:SIGOUIT,停止进程 可以中断shell,Linux内核会停止位shell分配CPU处理时间。 ctrl + c 信号9,值:SIGKILL,无条件终止进程 信号15,值:SIGTERM,尽可能终止进程 信号17,值:SIGSTOP,无条件停止进程,但不终止进程 信号18,值:SIGTSTP,停止或暂停进程,但不终止进程 ctrl + z 停止进程会继续保留在内存中,并能从上次停止的位置继续运行。 信号19,值:SIGCONT,继续运行停止的进程 捕获信号 trap命令, 捕获脚本退出:在trap命令后加EXIT信号 修改或移除捕获(tarp -- 信号) 命令格式: trap commands signals 命令格式: trap commands signals 命令格式: trap commands signals 命令格式: trap commands signals 2,后台运行脚本  & 方括号里是作业号,下一个是进程号PID ps
            
    3,非控制台下运行脚本 让脚本一直以后台模式运行到结束,即使退出了终端,可以用nohup命令来实现 nohup命令会自动将STDOUT和STDERR的消息重定向到一个名为nohup.out的文件中 4,作业控制(jobs) jobs jobs -l 列出进程的PID及作业号 jobs -n 只列出上次shell发出的通知后改变了状态的作业 jobs -p 只列出作业的PID jobs -r 只列出运行中的作业 jobs -s 只列出已停止的作业 带加号的是默认作业 带减号的是下一个默认作业 5,重启停止作业 要以后台模式重启一个作业,可以用bg命令加上作业号(bg 作业号) 要以前台模式重启作业,可以用带有作业号的fg命令(fg 作业号) 6,调整谦让度 优先级 -20(最高优先级) 19(最低优先级) nice设置命令启动时的调度优先级 nice -n 10 ./test4.sh > test4.out &
                ps -p 8045 -o pid,ppid,ni,cmd -n 命令行来指定新的优先级级别 renice想改变系统上一运行命令的优先级 ps -p 8089 -o pid,cmd renice -n 5 -p 8089 指定运行进程的PID来改变它的进程 注意: root用户可以通过renice人员调整进程的优先级 普通用户只能对属于你的进程执行renice 普通用户只能通过renice降低进程的优先级 7,定时运行作业 at 命令 命令格式: at [-f   filename]  time atd 守护进程----- /var/spool/at cron 表 命令格式: min hour dayofmonth month dayofweek command 列出已有的cron时间表 crontab -l 五、高级shell脚本编程 1,创建函数 function name { command } name 函数名称唯一 command 一条或多条命令 返回值 默认退出状态码(最后一条命令返回的退出状态码) -----用$?来确定函数的退出状态码 return 命令退出函数并返回特定的退出状态码 1,函数一结束就取返回值;2,退出状态码必须是0~255 函数递归 x! = x * (x-1)! 用简单的递归脚本 创建库 . ./func 在命令行上创建函数 function divem { echo $[ $1 / $2 ]; } divem 100 5 注意:在每个命令后面加个分号 function doublit { read -p "Enter value:" value; echo $[ $value * 2 ]; } doublit 2,图形化桌面的脚本编程 菜单 select命令 制作窗口 dialog包 3、正则表达式 。。。。。 4sed1)作用: 1,一次从输入中读取一行数据 2,根据所提供的编辑器命令匹配数据 3,安装命令修改流中的数据 4,将新的数据输出到STDOUT (2)sed命令选项 -e script 在处理输入时,将script中指定的命令添加到已有的命令中 如果需要多个命令,用-e选项; sed -e s/a/an/; s/test/test1/ sed.txt -f  file 在处理输入时,将file中指定的命令添加到已有的命令中 sed  -f  script.sed data1.txt -n 不产生命令输出(-n将禁止sed编辑器输出),使用print命令来完成输出 sed -n s/test/trial/p data5.txt (3)命令格式: sed   options script  file 命令 echo "This is a test" | sed s/test/big test/
                 sed -e s/a/an/;s/test/test1/ sed.txt 命令之间用分号隔开,末尾和分号之间不能有空格 (4)sed编辑器基础 1,默认情况下,它只替换每行中出现的第一处;,2,要让替换命令能够替换一行中不同的地方出现的文本必须使用替换标记substitution flag 替换标记:s 格式:s/pattern/replacement/flags 4种可用的替换标记 1, 数字,表明新文本将替换第几处模式匹配的地方; sed s/test/trial/2 data4.txt 2,g,表明新文本将会替换所有匹配的文本; sed  s/test/trial/g data5.txt 3,p,表明原先的内容要打印出来; sed -n s/test/trial/p data5.txt 4w  file, 将替换的结果写入到文件中; sed -n s/test/trial/w test52.txt data5.txt 5sed s//bin/bash//bin/csh/   /etc/passwd 可以用其他方法:(用感叹号被用做字符串分隔符) sed  s!/bin/bash!/bin/csh!   /etc/passwd 使用地址:作用于特定行或某些行,则必须用行寻址line addressing 两种形式的格式: [address]command 或 多个命令分组:address { command1 command2 command3 } 1,以数字形式表示行区间 sed 2s/dog/cat/ data1.txt 只修改指定地址的第2行修改 sed 2,$s/dog/cat/ data1.txt 从第2行开始的所有行修改,可以用特殊地址---美元符 2,用文本模式来 过滤出 行 /pattern/command sed /xiaoming/s/bash/csh/ /etc/passwd
                    3,命令组合 如果修改在单行上执行多条命令用花括号将多条命令组合在一起。 4,删除行 sed 2,4d data1.txt 删除2,3,4行 sed 2d data1.txt 删除2行 sed d data1.txt 删除所有行 sed 3,$d data1.txt 删除3行以下的行 5,打印 p命令来打印文本行 sed -n 2,3p data1.txt 打印出2,3行 sed查找包含数字3的行 = 命令用来打印行号 sed = data1.txt -n,能让sed只显示包含匹配的行的行号和文本 l (小写L)命令用来列出行 sed -n l data1.txt 6,写入 sed 1,2w test53.txt data1.txt sed /The/w test53.txt data1.txt 7,读取 将文本插入到指定地址后#sed 3r data2.txt data1.txt sed /2 The/r data2.txt data1.txt 插入到末尾#sed $r data2.txt data1.txt 5gawk1)作用: 1,定义变量来保持数据 2,使用算术和字符串操作符来处理数据; 3,通过使用结构化编程概念(比如if-then和循环)来为数据处理增加处理逻辑 4,通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。 列如:格式化日志文件 (2)gawk命令格式 gawk  options  program  file 用花括号定义 (3)gawk命令选项 -F fs 指定行中划分数据字段的字段分隔符 gawk -F: -f script3.gawk /etc/passwd
            -f  file 从指定的文件中读取程序 gawk -f script4.gawk /etc/passwd
            -v  var=value 定义gawk程序中的一个变量及其默认值 -mf N 指定要处理数据文件中的最大字段数 -mr N 指定数据文件中的最大数据行数 -W keyword 指定gawk的兼容模式或告警等级 (4)处理文本文件中的数据字段变量: 1,$0 代表整个文本行 2,$1 代表文本行中的第1个数据字段 gawk -F: {print $1} /etc/passwd
            3,$2 代表文本行中的第2个数据字段 4,$n 代表文本行中的第n个数据字段 5,gawk默认的字段分隔符是任意空白字符(例如空格或制表符) shell 六、变量 1,test命令 (1)test命令的文件比较功能 -d  file 检查file是否存在并是一个目录 -e  file 检查file是否存在 -f   file 检查file是否存在并是一个文件 -r  file 检查file是否存在并可读 -s   file 检查file是否存在并非空 -w  file 检查file是否存在并可写 -x   file 检查file是否存在并可执行 -O  file 检查file是否存在并属当前用户所有 -G  file 检查file是否存在并且默认组与当前用户相同 file1 -nt file2 检查fiel1是否比fiel2新 file1 -ot file2 检查file1是否比 file2 旧 (2)test命令的数值比较功能 n1 -eq n2 检查n1是否与n2 相等 n1 -ge n2 检查n1是否 大于或等于 n2 n1 -gt n2 检查n1是否与 大于 n2 n1 -le n2 小于或等于 n1 -lt n2 小于 n1 -ne n2 不等于 2、#,#,@,0,1,2,*,$$,$?的含义 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 [email?protected] 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当前进程ID号 $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误 3、局部变量 local temp=$[ $value + 5 ] 4、Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]作用与区别 $( ) 与` ` (反引号) 都是用来做命令替换用(commandsubstitution)的 例如 version=$(uname -r)和version=`uname -r`都可以是version得到内核的版本号 ${ }用于变量替换。一般情况下,$var 与${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围。 $ echo ${A}B BB $[] 和 $(()) : 它们是一样的,都是进行数学运算的。支持+ - * / %:分别为 “加、减、乘、除、取模”。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。 [ ] : 即为test命令的另一种形式。 5、双括号命令符号(( expression )) val++ 后增 val-- 后减 ++val 先增 --val 先减 !逻辑求反 ~   ~ :位求反 ** 幂运算 << 左位移 >> 右位移 & 位布尔和 | 位布尔或 && 逻辑和 || 逻辑或 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读