Shell脚本编程
因为经常换服务器,每次下载的东西都没有了,于是想自己写一个一键化的脚本,帮忙安装各种环境,一键化部署环境.
简单语法
- 定义变量
1,变量名和等号之间不能有空格; 2,首个字符必须为字母(a-z,A-Z)。 3, 中间不能有空格,可以使用下划线(_)。 4, 不能使用标点符号。 5, 不能使用bash里的关键字(可用help命令查看保留关键字)
- 使用变量
$xxx 或者 ${xxx} ,建议使用后者 只读变量设置为 readonly xxx 删除变量使用 unset xxx
- 特殊变量
?
- 转义符号
?
- 算数运算符
?
- 关系运算符(仅支持数字)
?
- 字符串运算符
?
- 文件测试运算符
?
- 字符串相关操作
获取字符串长度 test="QAQ" echo ${#test} 提取字符串 test="QAQ" echo ${test:1:2} //AQ 查找字符串 string="alibaba is a great company" echo `expr index "$string" is`
- 处理路径字符串
basename //获取文件名 dirname //获取路径名
- 数组
定义数组 test=(1 2 3 4) //以空格间隔 test[0]=1 test[1]=2 读取数组 ${test[1]} 读取所有元素 ${test[@]} 获取数组长度 ${#test[@]} // ${#test[*]} 获取单个元素长度 ${#test[1]}
- 注释
单行用# 多行 :<<EOF xxxx xxxx EOF
- 参数传递
使用脚本的时候我们可以向脚本传递参数 $0就是脚本名 $1 ... $n 就是我们传递的所有参数 $# //传递参数的个数 $$ //脚本当前进程ID号 $* //获取所有传递参数 //同上,不过更好用
- Shell脚本流程控制
if
if condition then command1 command2 ... commandN fi
if else
if condition then command1 command2 ... commandN else command fi
if else-if else
if condition1 then command1 elif condition2 then command2 else commandN fi
for循环
for var in item1 item2 ... itemN do command1 command2 ... commandN done
while
while condition do command done
case
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
还有break和continue命令用于跳出循环
- 函数
func_nmae(){ // } func_name
传参
#!/bin/bash # author:菜鸟教程 # url:www.runoob.com funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
自己写的一些垃圾脚本
用于安装一些基本环境,msf,empire,Vulhub,Docker等环境
#!/bin/bash source_file_update(){ echo "更新系统源中...." echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list apt-get update } check_install(){ if [ `whoami` == "root" ];then echo "Ok." else echo "因源文件普通用户不可写,请以root用户执行脚本. Example: sudo ./Linux_install.sh" exit fi } Basic_environment(){ echo "基础环境安装中...." apt-get install net-tools -y apt-get install wget -y apt-get install curl -y apt-get install vim -y apt-get install openssh-server -y apt-get install python3 -y apt-get install curl -y apt-get install python -y apt-get install git -y } docker_install(){ apt-get remove docker docker-engine docker.io apt-get install apt-transport-https ca-certificates curl software-properties-common # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # apt-get update echo "开始安装Docker" apt-get install docker-ce -y apt-get install python3-pip -y apt-get install nmap -y apt-get install sed -y python3 -m pip install docker-compose apt install docker-compose -y service docker start } vulhub_install(){ cd $HOME echo "安装vulnhub环境中..." git clone https://github.com/vulhub/vulhub } msf_install(){ echo "msf安装中...." curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall } powershell(){ cd $HOME mkdir Powershell cd Powershell git clone https://github.com/PowerShellMafia/PowerSploit.git } empire_install(){ cd $HOME echo "安装Empire.." git clone https://github.com/EmpireProject/Empire.git cd Empire ./setup/install.sh } neiwang(){ cd $HOME mkdir 内网渗透 cd 内网渗透 git clone https://github.com/idlefire/ew.git } zsh_install(){ cd $HOME apt-get install zsh -y chsh -s /bin/zsh sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions sed 's/plugins=(git)/plugins=(git zsh-autosuggestions)/' ~/.zshrc > test.QAQ cat test.QAQ > .zshrc rm test.QAQ source .zshrc } call_back(){ if [ $1 = "help" ] then echo "举例子: ./xxx.sh zsh_install,或者全部安装 ./xxx.sh,目前支持有 source_file_update Basic_environment docker_install vulhub_install msf_install powershell empire_install neiwang zsh_install sqlmap_install" else $1 fi } sqlmap_install(){ cd $HOME git clone https://github.com/sqlmapproject/sqlmap.git } main(){ if [ $# == 0 ] then check_install cd $HOME source_file_update Basic_environment docker_install vulhub_install msf_install powershell empire_install neiwang zsh_install sqlmap_install else for Setup in ;do call_back $Setup done fi } main $*
挺垃圾的,等以后有其他需求在整其他的吧.