shell脚本

Linux学习——shell编程

旧城冷巷雨未停 提交于 2020-01-17 06:54:20
LINUX-----shell编程(脚本shell) Shell的种类 1.sh 2.ksh 3.bash 4.C shell(包括csh and tcsh) 5.tcsh shell的概念 shell提供了你与操作系统之间的通讯方式,这种通讯方式可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,他们可以被重复使用。 本质上,shell script是命令行命令简单的组合到一个文件里面 程序基础 程序必须以下面的行开始(必须放在一个文件的第一行): #!/bin/sh #!用来告诉系统他后面的参数是用来执行该文件的程序 要使脚本可以执行: chmod +x filename 然后,您可以通过输入: ./filename 来执行您的脚本文件 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。建议在程序中使用注释,那么即使相当长的时间没有使用该脚本,您也可以在很短的时间内明白该脚本的作用及工作原理。 变量 在其他编程语言中必须使用变量。在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明。要赋值给一个变量,可以这样写: 变量名=值 取出变量值可以加一个美元符号(¥)(实际是shift+4)在变量前面 变量赋值时,“=”两边都不能有空格

shell学习记录----初识sed和gawk

十年热恋 提交于 2020-01-17 06:51:18
Linux命令行与shell脚本编程大全中关于sed和gawk的介绍合在一起,而且结构有点乱。 不像之前的命令写的很清楚。所以这次我需要写下来整理一下。 一、sed部分 1.1 sed命令格式如下: sed option script file -e script:在处理输入时,将script中指定的命令添加到已有的命令中 -f file:在处理输入时,将file中指定的命令添加到已有的命令中 -n: 不产生命令输出,使用print命令来完成输出 -e: 执行多个命令 1.2 script里面又有一些命令: s/pattern/replacement/flags 替换命令 ,flags包括:数字(行号),g(替换所有),p(打印原先内容),w file(写进文件) 例子: sed 's/test/trial/' data4.txt sed 's/test/trial/2' data4.txt sed 's/test/trial/g' data4.txt sed -n 's/test/trial/p' data4.txt sed 's/test/trial/w test.txt' data5.txt 然后,s指令,又可以指定地址,格式如下: [address]command 或者 address {   command1   command2   command3 } 或者直接用

shell条件测试

橙三吉。 提交于 2020-01-17 05:28:45
shell脚本的智能化 使用shell脚本获得识别能力? 为命令的执行提供最直接的识别依据 文件或目录的读/写等等状态 数值的大小 字串符是否匹配 多条件组合 test测试条件的基本用法 语法格式: 表达式两边至少要留一个空格 help test 查阅帮助 test 选项 参数 [ 选项 参数 ] 字串符比较 [ 字串符1 操作符 字串符2 ] 操作符 含义 == 两个字串符相同 != 两个字串符不相同 -z 字串符的值为空 != 字串符的值不为空(相当于! -z) [ root@proxy opt ] # test a == a ##判断字串符a是否等于a [ root@proxy opt ] # echo $? ##查看结果,0代表成功,非0为失败 0 [ root@proxy opt ] # test a == b [ root@proxy opt ] # echo $? 1 [ root@proxy opt ] # [ a == a ] ##另一种格式,效果同上,字符串两边有空格 [ root@proxy opt ] # echo $? 0 [ root@proxy opt ] # [ a == b ] [ root@proxy opt ] # echo $? 1 [ root@proxy opt ] # [ $USER == root ] ##判断当前用户名是否为root

shell脚本之猜数字

笑着哭i 提交于 2020-01-17 02:45:42
shell脚本之猜数字 [root@m01 scripts]# cat guess-number.sh #!/bin/bash num=`echo $[RANDOM%60]` while : do read -p "input a number in 1-60:" num1; if [[ $num1 -eq $num ]] then echo You are right! exit 0 elif [[ $num1 -lt $num ]] then echo You input number is low! elif [[ $num1 -gt $num ]] then echo You input number is big! fi done 检查脚本 [root@m01 scripts]# sh guess-number.sh input a number in 1-60:20 You input number is low! input a number in 1-60:50 You input number is big! input a number in 1-60:40 You input number is big! input a number in 1-60:30 You input number is big! input a number in 1-60:25

nfs服务、计划任务crond服务和shell

£可爱£侵袭症+ 提交于 2020-01-16 20:43:27
一、nfs服务 NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。   NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。 NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责信息的传输。 1、安装 yum install

基于Poco框架的面向页面UI自动化测试设计

删除回忆录丶 提交于 2020-01-16 13:29:20
Poco框架上手容易,与Airtest无缝结合,能快速解决一些棘手的页面校验问题,因此受到笔者的喜爱。Poco框架下测试代码是这样的(官方示例): # coding=utf-8 import time from poco . drivers . unity3d import UnityPoco poco = UnityPoco ( ) poco ( 'btn_start' ) . click ( ) # 根据name定位元素 poco ( text = 'drag drop' ) . click ( ) # 根据text属性定位元素 time . sleep ( 1.5 ) shell = poco ( 'shell' ) . focus ( 'center' ) # 得到shell元素的一个copy for star in poco ( 'star' ) : # 遍历star元素 star . drag_to ( shell ) # 依次放入shell中 time . sleep ( 1 ) assert poco ( 'scoreVal' ) . get_text ( ) == "100" , "score correct." # 校验游戏得分 poco ( 'btn_back' , type = 'Button' ) . click ( ) # 通过name,

jenkins 打包过程 执行shell 提示权限不够

假如想象 提交于 2020-01-16 11:22:17
现象: 安装jenkins,使用jenkins打包的时候,提示权限不足。 原因: 当前执行的人默认是jenkins 这个用户。 在执行脚本加上如下命令打印就可以看到 echo "当前操作人" whoami echo "当前目录" pwd whoami=jenkins查看配置文件,确实就是jenkins vi /etc/sysconfig/jenkins jenkins这个用户是安装jenkins 系统的时候,自动创建的,权限不大。甚至没有自己的目录。 cat /etc/passwd 这里直接简单粗暴的将执行jenkins的用户修改为root问题解决。 再执行 重启jenkins service jenkins restart 来源: https://www.cnblogs.com/a393060727/p/12200066.html

shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致

谁说胖子不能爱 提交于 2020-01-16 09:27:32
打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中。 先找出其中一台远程机器,查看main进程运行情况 1 2 3 4 5 [root@two002 tmp] # ps -ef|grep main root 23448 23422 0 11:40 pts /0 00:00:00 grep --color=auto main [root@two002 tmp] # ps -ef|grep main|grep -v grep|wc -l 0 shell检查脚本如下 1 2 3 4 5 6 7 8 [root@two002 tmp] # cat /tmp/main_check.sh #!/bin/bash NUM=$( ps -ef| grep main| grep - v grep | wc -l) if [ $NUM - eq 0 ]; then echo "It's not good! main is stoped!" else echo "Don't worry! main is running!" fi 执行脚本 1 2 3 4 5 6 7 8 9 10 11 12 [root@two002 tmp] # sh -x /tmp/main_check.sh ++ grep main ++ grep - v grep ++ wc -l ++ ps

Linux常见操作

我的梦境 提交于 2020-01-16 05:54:49
前面的话   本文将详细介绍Linux常见操作 基本概念   Linux严格区分大小写,所有内容以文件形式保存,包括硬件   Linux没有扩展名的概念,不靠扩展名来区分文件类型。但有一些约定俗成的扩展名 压缩包: .gz .bz2 .tar.bz2 .tgz 二进制软件包:.rpm 网页文件: .html .php 脚本文件: .sh 配置文件: .conf   [注意]windows下的程序不能直接在linux中安装和运行   Linux字符界面的优势如下:   1、占用的系统资源更少   2、减少了出错、被攻击的可能性 【分区类型】   主分区:最多只能有4个   扩展分区:最多只能有1个,主分区加扩展分区最多有4个,不能写入数据,只能包含逻辑分区 【硬件设置文件名】 硬件 设置文件名 IDE硬盘 /dev/hd[a-d] SCSI/SATA/USB硬盘 /dev/sd[a-p] 光驱 /dev/cdrom 或/dev/hdc 软盘 /dev/fd[0-1] 打印机(25针) /dev/1p[0-2] 打印机(USB) /dev/usb/1p[0-15] 鼠标 /dev/mouse 【挂载】 必须分区 / (根分区) swap分区 (交换分区,内存2倍,不超过2GB) 推荐分区 /boot (启动分区,200MB) 显示 【起始标识】 [root@bogon ~]#  

Mysql Shell 脚本

微笑、不失礼 提交于 2020-01-16 05:23:22
连接Mysql Shell脚本 本地连接及远程链接 #!/bin/bash #连接MySQL数据库 Host = 127.0.0.1 User = username PASSWORD = password PORT = 3306 DBNAME = "test_db_test" TABLENAME = "test_table_test" CREATE_DB_SQL = "SELECT * FROM ${DBNAME} . ${TABLENAME} " #本地连接 mysql -u $User -p $PASSWORD << EOF use ${DBNAME} ; SELECT * FROM ${DBNAME} . ${TABLENAME} ; COMMIT; EOF if [ $? = 0 ] ; then echo "create yes" fi #远程连接 mysql -h $Host -u $User -p $PASSWORD << EOF #指定Host,其他不变 use DATABASE_NAME ; SELECT * FROM TABLE_NAME ; EOF -e 方式连接 #!/bin/bash #连接MySQL数据库 Host = 127.0.0.1 User = username PASSWORD = password PORT = 3306 DBNAME =