shell函数

subprocess模块

我的梦境 提交于 2020-01-12 18:25:19
用法 import os import subprocess r = subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) # subprocess.Popen(cmd,shell=True,subprocess.stdout,subprocess.stderr) # cmd : 代表系统命令 # shell = True 代表这条命令是 系统命令,告诉操作系统,将cmd当成系统命令去执行 # stdout 是执行完系统命令之后,用于保存结果的一个管道 # stderr 是执行完系统命令之后,用于保存错误结果的一个管道 stdout = r.stdout.read().decode('gbk') stderr = r.stderr.read().decode('gbk') print('正确的返回结果:',stdout) print('错误的返回结果:',stderr) print('错误的返回结果:',stderr) 以前我一直用 os.system() 处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式. 我们能从Python官方文档里读到应该用 subprocess 模块来运行系统命令. subprocess 模块允许我们创建子进程,连接他们的输入/输出

shell编程之函数定义及使用

不羁岁月 提交于 2020-01-12 07:40:59
一.函数定义 #!/bin/sh #func1.sh hello() ##函数定义 {   echo "Hello there today's date is 'date +%Y-%m-%d' "   #return 2 ###返回值其实是状态码,只能在[0-255]范围内 } echo "now going to the function hello" hello #echo $? 获取函数的return值 echo "back from the function" 函数调用:function hello() 或 function hello 或 hello 注意:1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行,不会像其它语言一样先预 编译    2.函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后 一条命令运行结果,作为返回值。return后跟数值n(0-255) 脚本高度:sh-vx helloWorld.sh或者在脚本中增加set -x 二.函数参数 #!/bin/bash #fun1.sh funWithParam(){   echo "第一个参数为 $1!"   echo "第二个参数为 $2!"   echo "第十个参数为 $10!"   echo "第十个参数为 ${10}!"   echo "第十一个参数为

初入Shell

风格不统一 提交于 2020-01-12 00:07:23
shell 第 1 章 Shell 概述 大数据 程序员 为什么要 学习 Shell 呢?   1 ) 需要看懂运维人员 编写的Shell程序。   2) 偶尔会编写一些简单 Shell 程序 来管理集群、 提高开发效率 。    第 2 章 Shell 解析器   ( 1 ) Linux 提供的 Shell 解析器有: [atguigu@hadoop101 ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh   ( 2 ) bash 和 sh 的关系 [atguigu@hadoop101 bin]$ ll | grep bash -rwxr-xr-x. 1 root root 941880 5月 11 2016 bash lrwxrwxrwx. 1 root root 4 5月 27 2017 sh -> bash   ( 3 ) Centos/Ubutun 默认的 解析 器 是bash [atguigu@hadoop102 bin]$ echo $SHELL /bin/bash 第 3 章 Shell 脚本 入门 1 . 脚本格式 脚本以 #!/bin/bash 开头 (指定解析 器 ) 2 . 第一个 Shell 脚本 :helloworld ( 1 )需求:创建一个

SHELL脚本编程生产案例

拈花ヽ惹草 提交于 2020-01-11 22:38:42
Shell脚本编程 基础 编写脚本 backup.sh,可实现每日将/etc/目录备份/backup/etcYYYY-mm-dd中 #!/bin/bash cp -av /etc/ /data/etc\ ` date +%F ` 编写脚本 hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问” #!/bin/bash ping -w3 -c3 $1 & > /dev/null && echo "该IP地址可访问" || echo "该IP地址不可访问" 编写脚本 checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满 #!/bin/bash CHECKDISK = ` ( df ; df -i ) | egrep "^/dev/sda" | tr -s ' ' % | cut -d '%' -f5 | sort -nr | head -1 ` [ $CHECKDISK -gt 80 ] & > /dev/null && echo "磁盘空间或节点编号空间已达到80%" | mail -s "空间已满" root 编写脚本 per.sh,判断当前用户对指定参数文件,是否不可读并且不可写 #!/bin/bash [ !

Shell脚本中的break continue exit return

柔情痞子 提交于 2020-01-11 08:33:55
转自:http://www.cnblogs.com/guosj/p/4571239.html break 结束并退出循环 continue 在循环中不执行continue下面的代码,转而进入下一轮循环 exit 退出脚本, 常带一个整数给系统,如 exit 0 return 在函数中将数据返回 或返回一个结果给调用函数的脚本 我理解为:break是立马跳出循环;continue是跳出当前条件循环,继续下一轮条件循环;exit是直接退出整个脚本 例如: 在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。 break命令 break命令允许跳出所有循环(终止执行后面的所有循环)。 下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。 复制代码 代码如下: #!/bin/bash while : do echo -n "Input a number between 1 to 5: " read aNum case $aNum in 1|2|3|4|5) echo "Your number is $aNum!" ;; *) echo "You do not select a number between 1 to 5, game is over!"

shell内建命令--Linux

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-11 06:50:16
exec命令()取代当前shell find ./ -name "*.txt" -exec ls -al {} \; find ./ -name "*.txt" -exec rm -rf {} \; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asuNPUtM-1577971154085)(en-resource://database/3994:1)] export 使变量都能被子shell识别 majun@instance-zqtg07w6:~$ cat export.sh #!/bin/bash echo $var majun@instance-zqtg07w6:~$ bash export.sh #输出空白 majun@instance-zqtg07w6:~$ var = 100 majun@instance-zqtg07w6:~$ bash export.sh #输出空白 majun@instance-zqtg07w6:~$ export var = 100 majun@instance-zqtg07w6:~$ bash export.sh 100 kill命令(常用) #kill的信号代码有很多种,常用的三种 1 ( 原地重启 ) 、9(强行杀掉)、15(正常结束) kill -9 2935 kill -1 2915 kill -15

shell脚本编程-计算方式

三世轮回 提交于 2020-01-11 04:09:35
Shell的几种计算方式 shell中只支持整数计算,也就是所有可能产生小数的运算都会舍去小数部分 支持常规算术运算符(+,-,*,/,%,**(幂运算))和复合算术运算符(+=,-=,*=,/=,%=)以及位运算(<<,>>,&,|,^,~)和自增自减(++,--)【操作对象只能是变量,不能是常数或表达式】 1. let 计算方式 # let "value=4<<2" # echo $value 16 2.$[]和$(())类似,用于简单的算术运算 # echo $[1+1] 2 # echo $[2-1] 1 3.expr计算方式 (特殊符号需要用转义字符,操作数和操作数之间需要有空格,否则就只会打印出字符串) # expr 1+1 1+1 # expr 1 + 1 2 # expr 2 \* 2 4 # rsult=$(expr 2 \* 2) # echo $rsult 4 4.内建运算命令declare (-i 指定变量为整型) # I=1+1 # echo $I 1+1 # declare -i J # J=1+1 # echo $J 2 5.算术扩展 为shell内置整数变量的运算机制,是shell内建命令之一 语法:$((算术表达式)) # i=2 # echo $((2*i+1)) 5# echo $((2*(i+1))) 6# var=$((2*i+2)) #

linux shell 基础语法B

岁酱吖の 提交于 2020-01-10 18:39:26
接着之前的内容继续讲shell编程的基础。 这部分还是先要巩固重定向的使用,以及创建自己的文件描述符,在编写shell脚本中关注临时重定向和永久重定向的用法。 (1)< << (2)> >> 为了区分如上的重定向符号,大家搞懂以下2个例子就行: cat > file <<eof; cat >> fileA <fileB 实际使用中输入重定向还是比较少,多数是输出重定向 &> 表示stdout和stderr都重定向 对于文件描述符,我们不光要掌握0,1,2,还要能够自己创建自己的文件描述符,且在shell编程中与默认的标准文件描述符进行组合使用。比如说要恢复文件描述符就是一个例子。 exec 3 >&1 exec 1> testfile ... ... exec 1>&3 ... ... 以上是输出重定向的恢复,输入重定向如下 exec 6 <&0 exec 0 <filein ... exec 0 <&6 关闭文件描述符 exec 3 >&- 还有一种<>读写文件描述符的,慎用,最好是读完后再重定向写入,不然shell维护的内部指针会把文件内容搞得很混乱。 创建临时文件和目录 mktemp file.XXXXXX mktemp -t 创建在/tmp下面且返回绝对路径 mktemp -d创建目录 tee的使用 tee -a 重定向讲完,再讲讲脚本的控制。脚本的控制主要是信号的处理。

Shell编程-条件测试 | 基础篇

半腔热情 提交于 2020-01-10 05:16:28
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令。除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux系统提供的其他程序一样执行这个文件,这个命令文件就叫做Shell程序或者Shell脚本。当运行这个文件时,它会像在命令行输入这些命令一样顺序地执行它们。 Shell脚本支持变量、命令行参数、交互式输入、函数模块、各种控制语句等高级编程语言的特性,如if、case、while和for等。利用Shell程序设计语言可以编写出功能非常复杂的脚本程序,把大量的任务自动化,尤其是那些需要输入大量命令而在执行过程中不太需要与用户进行干预的系统管理任务。 为了让Shell能读取并且执行Shell程序,Shell脚本的文件权限必须被设置为可读和可执行。为了让Shell可以找到程序,可以选择输入完全路径名,或者将这个脚本的路径放在PATH环境变量指定的路径列表中。Shell脚本不是复杂的程序,它是由上往下逐行解释执行的。脚本的第一行总是以“#!<Shell解释器文件路径>”开始,用来指定该脚本是使用那种Shell进行解释执行。 编写Shell脚本 1)使用VI或者其他任意的文本编辑工具创建一个名为HelloWorld.sh的文件,并在其中加入以下内容: [root@localhost ~]# vi

如何从另一个Shell脚本调用Shell脚本?

萝らか妹 提交于 2020-01-09 16:46:14
我有两个 shell 脚本 a.sh 和 b.sh 。 我怎么能叫 b.sh 从shell脚本中 a.sh ? #1楼 看一下这个。 #!/bin/ bash echo "This script is about to run another script." sh ./script.sh echo "This script has just run another script." #2楼 pathToShell="/home/praveen/" chmod a+x $pathToShell"myShell.sh" sh $pathToShell"myShell.sh" #3楼 您可以使用 /bin/sh 调用或执行另一个脚本(通过您的实际脚本): # cat showdate.sh #!/bin/bash echo "Date is: `date`" # cat mainscript.sh #!/bin/bash echo "You are login as: `whoami`" echo "`/bin/sh ./showdate.sh`" # exact path for the script file 输出为: # ./mainscript.sh You are login as: root Date is: Thu Oct 17 02:56:36 EDT 2013 #4楼