Shell脚本编程

 
因为经常换服务器,每次下载的东西都没有了,于是想自己写一个一键化的脚本,帮忙安装各种环境,一键化部署环境.
 

简单语法

  • 定义变量
1,变量名和等号之间不能有空格;

2,首个字符必须为字母(a-z,A-Z)。

3, 中间不能有空格,可以使用下划线(_)。

4, 不能使用标点符号。

5, 不能使用bash里的关键字(可用help命令查看保留关键字)
  • 使用变量
$xxx 或者 ${xxx}  ,建议使用后者
只读变量设置为 readonly xxx
删除变量使用 unset xxx
  • 特殊变量

Shell脚本编程?

  • 转义符号

 
Shell脚本编程?

  • 算数运算符

 
Shell脚本编程?

  • 关系运算符(仅支持数字)

 
Shell脚本编程?

  • 字符串运算符

 
Shell脚本编程?

  • 文件测试运算符

Shell脚本编程?

  • 字符串相关操作
获取字符串长度
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 $*

 
挺垃圾的,等以后有其他需求在整其他的吧.