shell脚本

Shell常用语句及结构

匿名 (未验证) 提交于 2019-12-02 23:43:01
条件判断语句之if 语句1 if [ expression ] then Statement(s) to be executed if expression is true fi 语句2 if [ expression ] then Statement(s) to be executed if expression is true else Statement(s) to be executed if expression is not true fi 语句3 if [ expression 1 ] then Statement(s) to be executed if expression 1 is true elif [ expression 2 ] then Statement(s) to be executed if expression 2 is true elif [ expression 3 ] then Statement(s) to be executed if expression 3 is true else Statement(s) to be executed if no expression is true fi 说明 如果 expression 返回 true,then 后边的语句将会被执行;如果返回 false,不会执行任何语句。 最后必须以 fi

Shell 用变量的值作为新的变量名,eval命令的简单解释

匿名 (未验证) 提交于 2019-12-02 23:43:01
背景 我为什么有这个需求? 我有三台服务器分别是server1,server2,server3,我需要写一个脚本在三台主机运行的时候分别执行不同的参数。 server1=close sth on server3 server2=close sth on server3 server3= close sth on server3 我的期待: sh `python \$$(hostname) 参数` hostname就是server1,2,3.但这样做根本行不通。因为shell只对命令解析一次得到的输出是 $server1 eval命令 对shell命令做两次解析。※普通shell只对命令做一次解析。 $变量名 意思是获取变量的值 $$ 当前Shell进程ID。 \$ $ 斜杠防止第一次shell解析时被当作特殊变量"$$"被扩展 防止第一次shell解析时被当作特殊变量"$$"被扩展 example1 没有eval时 [root@izuf61vzhmpllsrk4narjxz test]# aa=25 bb=aa [root@izuf61vzhmpllsrk4narjxz test]# echo \$$bb $aa 执行过程: 仅扫描一次:$bb获取到了bb的值aa成功替换 ,替换后$aa作为字符串,执行echo `$aa` 直接输出 `$aa` 有eval时 [root

shell的内建命令和外部命令

匿名 (未验证) 提交于 2019-12-02 23:42:01
Shell 执行的命令可以分为内建命令( built-in )和外部命令( external ),前者是构建在 shell 内部;后者是一个独立的文件(可以是二进制文件,也可以是一个脚本)。 内建命令的执行比较简单,由当前 shell 本身来执行,例如 echo, eval, exec, export, readonly, read, shift, wait 和点( . )等; 外部命令的执行比较复杂, shell 进程会 fork 一个子进程,父进程随后挂起,然后在子进程中 exec 加载外部文件,子进程返回后,父进程才继续执行。 从上面的区别可以看出,内建命令的性能要优于外部命令,因为它没有新建进程的开销。 使用 type 命令可以区别一个命令是内建命令,还是外部命令: [ root@localhost tmp ] # type cd cd is a shell builtin [ root@localhost tmp ] # type awk awk is /bin/awk 注意, Shell 会沿着路径 $PATH 来寻找外部命令,环境变量 PATH 是一个以冒号分隔的目录列表, [ root@localhost tmp ] # echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:

shell 脚本启动 flask

匿名 (未验证) 提交于 2019-12-02 23:41:02
#!/usr/bin/env bash# 第一行是说明使用的什么脚本语言,这里是 bash, 固定用法# workdir 是一个路径,即先切换到这个目录下,然后启动服务 (启动命令: python app.py)。其实不切换应该也可以 workdir=/Users/llm/PycharmProjects/solar-clover-backend # 启动函数,切换路径=》其实就是 python app.py 。 前面一段指明是哪个路径下的python, 后面是 app.py 的路径, & 表示以后台方式启动(这里还不是很了解) daemon_start() { cd $workdir /Users/llm/env_workspaces/flask/bin/python /Users/llm/PycharmProjects/solar-clover-backend/app.py & echo "Server started." } # 停止函数,思路就是我们要找到这个进程号,然后把它 kill 掉# 进程号寻找: 即 ps -ef|grep 命令, grep 用来过滤,awk 用来将过滤结果进行整理。 像这个命令,过滤出来有很多列,但我们只要进程号那一列,所以就是 {print $2}, 表示进程号那一列# BEGIN{ ORS="," } 表示以逗号分隔每个进程号,

使用Shell函数

匿名 (未验证) 提交于 2019-12-02 23:41:02
版权声明:苏苏吖 https://blog.csdn.net/weixin_44774638/article/details/91489472 问题 本案例要求编写两个Shell脚本,相关要求如下: 一个funexpr.sh脚本:由用户在执行时提供2个整数值参数,计算这2个整数的加、减、乘、除结果 为源码安装的Web服务编写服务脚本myhttpd:启动、停止操作都使用函数实现;已知httpd安装路径位于/usr/local/httpd 方案 在Shell脚本中,将一些需重复使用的操作,定义为公共的语句块,即可称为函数。通过使用函数,可以使脚本代码更加简洁,增强易读性,提高Shell脚本的执行效率 1)函数的定义方法 格式1: function 函数名 { 命令序列 … … } 格式2: 函数名() { 命令序列 … … } 一般来说,第二种格式比较常见。 比如,以下脚本代码可以定义一个名为helloworld1的函数(格式1),用来输出一段文字“Hello 1 World .”: function helloworld1 { echo “Hello 1 World .” } 以下脚本代码可以定义一个名为helloworld2的函数(格式2),用来显示调用此函数时提供的位置参数($ 表示所有参数的值): helloworld2() { echo "Hello, $ " } 2

Android dumpsys 命令使用

匿名 (未验证) 提交于 2019-12-02 23:38:02
adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名 需要列出当前运行的服务,可运行: adb shell dumpsys | findstr DUMP 下面简单列下我用到的一些命令...(在编写脚本时需要获取一些状态值供判断用) 获取设备分辨率: adb shell dumpsys display | findstr DisplayDeviceInfo DisplayDeviceInfo { "内置屏幕" : 1080 x 1920 , 55.0 fps , density 480 , 464.949 x 468.923 dpi ... 获取设备电池信息: adb shell dumpsys battery Current Battery Service state : AC powered : false USB powered : true Wireless powered : false status : 2 #电池状态 health : 2 present : true level : 34 #电量 scale : 100 voltage : 3848 current now : - 427943 temperature : 280 #电池温度 technology : Li - ion 获取cpu信息: adb

shell 多线程编程和wait命令

匿名 (未验证) 提交于 2019-12-02 23:38:02
shell里面也是可以进行多线程编程的,而且十分方便,同时,wait命令可以进行shell的多线程同步控制。 1、启动后台子任务: sleep 10 #等待10秒,再继续下一操作 sleep 10 & #当前shell不等待,后台子shell等待 2、wait命令介绍 示例1:使用wait等待所有子任务结束 #!/bin/bash sleep 10 & sleep 5& wait #等待10秒后,退出 #!/bin/bash sleep 10 & sleep 5& wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出 示例2:在函数中使用wait #!/bin/bash source ~/.bashrc fun(){ echo "fun is begin.timeNum:$timeNum" local timeNum=$1 sleep $timeNum & wait #这个只等待wait前面sleep echo "fun is end.timeNum:$timeNum" } fun 10 & fun 20 & wait #如果fun里面没有wait,则整个脚本立刻退出,不会等待fun里面的sleep echo "all is ending" 输出: fun is begin.timeNum:10 fun is begin.timeNum:20

shell脚本一键部署kibana

匿名 (未验证) 提交于 2019-12-02 23:34:01
#!/bin/bash #配置Kibana的安装目录 修改的地方1 脚本可以自己创建 echo -e "请输入kibana的安装目录,不存在脚本自动创建,例如 /bigdata/install" read kibanainstallpath #创建Kibana安装的目录 if [ ! -d $kibanainstallpath ]; then mkdir -p $kibanainstallpath fi if [ ! -d $kibanainstallpath ]; then echo "创建目录$kibanainstallpath失败!请检查目录是否有权限" exit fi #解压tar包 currentdir=$(cd $(dirname $0); pwd) ls | grep 'kibana-.*[gz]$' if [ $? -ne 0 ]; then #当前目录没有es的压缩包 echo "在$currentdir下没有发现kibana-*.tar.gz,请自行上传!" exit else #解压 tar -zxvf $currentdir/$(ls | grep 'kibana-.*[gz]$') -C $kibanainstallpath fi kibanabanben=`ls $kibanainstallpath| grep 'kibana-.*'` #PATH设置

Vim编辑器与Shell编辑器

匿名 (未验证) 提交于 2019-12-02 23:32:01
Vim文本编辑器(对应配置文件,多着色功能) Vim编辑器模式:命令模式、输入模式、末行模式;命令模式用ESC键在输入和末行模式之间切换,但末行与输入不能直接进行切换;进入输入模式可以用a、i、o键;进入末行模式用:键 Vim常用的命令 dd ---删除光标所在行 5dd ---删除从光标处开始的5行 yy ---复制光标所在整行 5yy ---复制从光标处开始的5行 u ---撤销上一步操作 p ---执行之前删除或复制的数据粘贴到光标后 常用的末行模式命令 :w ---保存 :q ---退出(有提示) :q! ---强退不保存 :wq! ---强退并保存 编辑Shell脚本 Shell脚本文件以.sh为后缀 Shell脚本格式一般分为三类:声明、注释、代码 eg: #!/bin/bash ---声明:必须写,否则报错 #注释信息 ---注释:可写可不写(多行或一行),对功能、某行参数进行解释说明 xxxx ---代码:具体执行的命令 xxxxxx 如何执行编辑好的脚本: 命令(bash/sh)+对象(以.sh为后缀的Shell脚本名称)+参数(对应脚本中需要执行命令的内容) eg: bash haha.sh a b c d e f eg: ./example.sh ---也可以输入完整路径的方式来执行 在Linux中当输入命令后,会发生什么呢?确认命令执行后

Shell中整数自增的几种方式

匿名 (未验证) 提交于 2019-12-02 23:32:01
Shell中整数自增的几种方式 杰瑞26 阅读数:2816 在Shell脚本中,用于while或for循环中经常要涉及到整数自增的情况,下面罗列下可能的方式 【方式一】declare -i来声明整数变量 root@localhost:~# declare -i x=1 root@localhost:~# x+=1 root@localhost:~# echo $x 2 【方式二】使用let命令 root@localhost:~# i=1 root@localhost:~# let i+=1 root@localhost:~# echo $i 2 root@localhost:~# i=1 root@localhost:~# let i=$i+1 root@localhost:~# echo $i 2 root@localhost:~# i=1 root@localhost:~# let i++ root@localhost:~# echo $i 2 root@localhost:~# i=1 root@localhost:~# let ++i root@localhost:~# echo $i 2 【方式三】使用(()) root@localhost:~# i=1 root@localhost:~# ((++i)) root@localhost:~# echo $i 2 root