[TOC]
0x00 基础命令
sh 命令
描述:Bourne Shell它是bash的前生所以大多用法与bash是一致的;
基础语法
代码语言:javascript复制sh [options] [file]
#选项
-c string: 命令从-c后的字符串读取。
-i: 实现脚本交互。
-n: 进行shell脚本的语法检查。
-x: 实现shell脚本逐条语句的跟踪。
-s: 用于从标准输入中读取命令,接收命令参数在子shell中执行;
使用案例:
代码语言:javascript复制#示例1.使用-x选项跟踪脚本调试shell脚本,能打印出所执行的每一行命令以及当前状态:
sh -x check_ssh_login.sh
DEFINE=30
cat /var/log/secure
awk '/Failed/ { ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'
#示例2.使用-s选项接收命令行中传入的参数
curl -sSL http://weiyigeek.top/test.sh | bash -s "Hello World!"
echo 'echo hello $1' | sh -s 'world'
#hello world
echo 'ls $1 $2' | sh -s '-l' '-h'
#anaconda-ks.cfg
bash 命令(Shell灵魂)
描述:bash 是一个为GNU计划编写的Unix shell,它的名字是一系列缩写Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / Born again), Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
代码语言:javascript复制#用法:
bash [GNU 长选项] [选项] ...
bash [GNU 长选项] [选项] 脚本文件 ...
#参数说明
-c:若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数
-n:检测脚本是否正确并不执行脚本,仅仅验证语法; (常用)
-v: 在执行脚本的时候,先将脚本内容输出到屏幕上然后执行脚本,如有错误则输出; (常用)
-x:执行脚本并输出执行过程调试利器; (常用)
-i:若用-i参数,则bash是交互的
-s:若用-s参数,则bash从标准输入中读入命令(在执行完-c带的命令之后)直到输入exit
-:单一的号表明参数执行完毕,并且屏蔽此后所跟参数,后面的所有变量都被看作是文件名
--norc:如果bash是交互的,则不执行个人初始化文件:-/.bashrc,如果bash作为sh来运行,这个参数缺省是关闭的
--noprofile:不执行系统范围的启动文件/etc/profile也不执行个人的启动文件-/.bash_profile,-/.bash_login或-/.profile,缺省情况下,bash作为登录的shell时以这些文件作为启动文件
--rcfile文件名:如果bash是交互的,则以此文件作为bash的启动文件替代-/.bashrc
--login:激活bash,伪装为登录shell
--nobraceexpansion:不执行大括号扩展
--nolineediting:在交互状态下不使用GNU的readline库去读取命令即取消了命令行编辑功能
--posix:改变bash的行为,使其符合Posix 1003.2规定的标准
--version:在bash开始时显示此bash的版本号--quiet:不显示版本号和其他信息,这是缺省值
Shell 选项:
代码语言:javascript复制-irsD 或 -c 命令 或 -O shopt选项 (仅适合调用)
-abefhkmnptuvxBCHP 或 -o 选项
#请输入`bash -c "help set"' 以获得关于 shell 选项的更多信息
#请输入`bash -c help' 以获得关于 shell 内嵌命令的更多信息
WeiyiGeek.内建命令
实际案例:
代码语言:javascript复制#示例1.检测脚本是否正确,并不执行 , 在set命令中也能实现调试
bash -n database.sh
#示例2.执行脚本,输出执行过程,shell脚本自身已经包含了调式选项,能都打印出脚本接受的参数和输入
bash -x database.sh #-x 选项是打印所有行的信息
sh -x script.sh #使用-x选项跟踪脚本调试shell脚本,能打印出所执行的每一行命令以及当前状态:
# test.sh: line 8: ((: 1 : syntax error: operand expected (error token is " ")
# '[' 1 -le 100 ']'
# (( sum =1 ))
# (( 1 ))
# test.sh: line 8: ((: 1 : syntax error: operand expected (error token is " ")
# '[' 1 -le 100 ']'
# (( sum =1 ))
# (( 1 ))
#示例3.子shell(subshells)问题:
#运行一个shell脚本时会启动另一个命令解释器,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件start cmd.bat 里的一系列命令。
#每个shell脚本有效地运行`在父shell(parent shell)的一个子进程里`,这个父shell是指在一个控制终端或在一个`xterm窗口`中给你命令指示符的进程。
cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5
#示例4.如果cmd2 是cd / 那么就会改变子Shell的工作目录,这种`改变只是局限于子shell内部`,cmd5则完全不知道工作目录发生的变化。`子shell是嵌在圆括号()内部的命令序列,子Shell内部定义的变量为局部变量`。
unset TERMINFO #清理变量名
set -C #转向所产生的文件
WeiyiGeek.临时环境变量
0x01 输入输出
echo 命令
描述:用于输出指定字符串或者变量的值;
代码语言:javascript复制echo [选项] "输出内容"
#选项
-n: 一行输出。
-E:不使用反斜杠字符及不激活
-e:激活转义字符,下面是支持反斜杠控制的字符转换列表
转义符
b 退格键,向左删除键
n 换行符
r 回车键
t 制表符,Tab键
v 垂直制表符
c 显示不换行
nnn - 按照八进制ASCII码输出字符,其中0为数字零,nnn是三位八进制数
xhh - 按照十六进制ASCII表输出字符,其中hh是两位十六进制数
补充shell 终端字符颜色:终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关shell,python,perl等均可以调用。
代码语言:javascript复制#说明:转义序列是以 ESC 开头,可以用 33 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。
33[显示方式;前景色;背景色m #方式1
E[显示方式;前景色;背景色m #方式2
#示例:中括号中1:代表开启高亮颜色,末尾0m:代表关闭颜色
e[1;开启颜色;文字颜色;背景颜色 String e[0m关闭颜色
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
文字颜色:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)
背景颜色:重置=0,40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色)
#Shell Code :
# echo 显示带颜色需要使用参数-e
# 字颜色:30—–37
echo -e "