shell小脚本集合

0.vim脚本规范

vi ~/.vimrc

autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
         if expand("%:e")=='sh'
             call setline(1,"#!/bin/bash")
             call setline(2,"#")
             call setline(3,"#*************************************")
             call setline(4,"#author:                zyx")
             call setline(5,"#file:                  ".expand("%"))
             call setline(6,"#email:                 xxxxxxxx@qq.cn")
             call setline(7,"#version:               1.0")
             call setline(8,"#date:                  ".strftime("%Y-%m-%d"))
             call setline(9,"#description:           test script")
             call setline(10,"#*************************************")
         endif
endfunc

1.猜数字

#!/bin/bash
x=$[RANDOM%10+1]
while read -p "please your number1-10:" num;do
   #echo $num
    if [ "$num" -eq "$x" ];then
       echo your gueess right.
       break
    elif [ "$num" -lt "$x" ];then
       echo letter
    else
       echo  more
    fi
done

2.棋盘

#!/binbash
red="\033[41m"
blue="\033[44m"
cloend="\033[0m"
#echo -e "$red  $cloend"
for j in {1..8};do
  if [ $[j%2] -eq 1 ];then
   for i in {1..8};do
       if [ $[i%2] -eq 1 ];then
            echo -e "$red  $cloend\c"
       else
           echo -e "$blue  $cloend\c"
       fi
   done
  elif [ $[j%2] -eq 0 ];then
      for k in {1..8};do
         if [ $[k%2] -eq 0 ];then
           echo -e "$red  $cloend\c"
         else
           echo -e "$blue  $cloend\c"
         fi
      done
   fi
      echo
done

3.九九乘法表

#!/bin/bash
for i in {1..9};do
    for j in $(seq $i);do
       let k=i*j
       echo -e "$i x $j = $k\t\c"
       #echo -e "${j}x$i=$[j*i]\t\c"
    done
    echo
done

4.echo yes or no

#!/bin/bash
read -p "Input yes or no: " yn
[[ "$yn" =~ ^[yY]([Ee][Ss])?$ ]] && { echo yes;exit 0; }
[[ "$yn" =~ ^[Nn][Oo]?$ ]] && { echo no;exit 1; }
echo please input yes or no.

5.复制Linux命令和库

#!/bin/bash

f_dir=/mnt/sysroot
#判断指令是否存在
input_cmd(){
    while :;do
 read -p "plsease input cmd or quit: " cmd
       if [ -z "$cmd" ];then
       echo please input cmd
       continue
    elif [ $cmd == "quit" ];then
       exit 88
    elif  ! which $cmd &> /dev/null;then
       echo no $cmd command
    continue
    else
       break
    fi
 done
}
#复制命令
cp_cmd(){
    cmd_name=`which --skip-alias $cmd`
    cmd_dir=`dirname ${cmd_name}`
 [ -d ${f_dir}${cmd_dir} ] || mkdir -p ${f_dir}${cmd_dir}
 [ ! -f ${f_dir}${cmd_name} ] && { cp  ${cmd_name} ${f_dir}${cmd_name};echo $cmd copy finshed.; } || echo $cmd is exist.
}
#复制命令库
cp_cmd_lib(){
    for lib_name in `ldd /usr/bin/$cmd | sed -r '1d;s/.*[[:space:]](\/.*) .*/\1/g'`;do
     lib_dir=`dirname ${lib_name}`
  [ -d ${f_dir}${lib_dir} ] || mkdir -p ${f_dir}${lib_dir}
     [ -f ${f_dir}${lib_name} ] || cp  ${lib_name} ${f_dir}${lib_name}
 done
    echo "backup ${cmd}'s library finished"
}

main(){
    while :;do
       input_cmd
       cp_cmd
       cp_cmd_lib
    done
}

main

6.斐波那契数列(兔子数列)

#!/bin/bash
fact(){
   if [ $1 -eq 0 ];then
      echo 0
   elif [ $1 -eq 1 ];then
      echo 1
   else
      echo $[`fact $[$1-1]`+`fact $[$1-2]`]
   fi
}

fact $1
#f(n)=f(n-1)+f(n-2)

7.冒泡法排序

#!/bin/bash
declare -a arry
read -p "plaeas input some numbers: " -a arry
for((c=1;c<=${#arry[@]};c++));do
   for i in $(seq 1 $[${#arry[*]}-1]);do
      if [ ${arry[$[$i-1]]} -gt ${arry[$i]} ];then
      #两个数用异或对调
          let arry[$[$i-1]]=arry[$[$i-1]]^arry[$i]
          let arry[$i]=arry[$[$i-1]]^arry[$i]
          let arry[$[$i-1]]=arry[$[$i-1]]^arry[$i]
      fi
   done
done
echo ${arry[@]}

8.等腰三角形

#!/bin/bash
read -p "Please input the length: " n:
for i in `seq 1 $n`
do
   for((j=$n;j>i;j--))
   do
      echo -n  "@"
   done
   for k in $(seq 1 $[2*$i-1]);do
      echo -n "*"
   done
   echo
done

9.生成证书和授权

#!/bin/bash
dir=/etc/pki/CA

# 建立CA
ca_build(){
    umask 077 &&
    openssl genrsa -out ${dir}/private/cakey.pem 4096 &&
    openssl req -new -x509 -key ${dir}/private/cakey.pem -out ${dir}/cacert.pem -days 365 <<EOF
Country Name(2 letter code)
State or Province Name
Locality Name
Organization Name(eg, company)
Organizational Unit Name
Common Name
Email Addres
EOF
    touch ${dir}/index.txt &&
    echo 01 > ${dir}/serial &&
    echo ca build successful.
    }

# 申请证书
ca_apply(){
    umask 066 &&
    openssl genrsa -out /data/test.key 1024
    openssl req -new -key /data/test.key  -out ${dir}/test.csr <<EOF
Country Name(2 letter code)
State or Province Name
Locality Name
Organization Name(eg, company)
Organizational Unit Name
Common Name
Email Addres


EOF
 #scp /data/test.csr  CAServer:/data/
     echo ca apply successful.
}

# 颁发证书
ca_issue(){
    openssl ca -in ${dir}/test.csr -out /etc/pki/CA/certs/test.crt -days 100 <<EOF
y
y
EOF
    echo ca issue successful.
}

#帮助
help_info(){
    cat <<EOF
-b : build ca
-a : apply ca
-i : issue ca
-A : do all
EOF

main(){
   if [ $# -eq 0 ];then
      help_info
      exit 1
   fi
   while getopts "baiA" flag;do
       case $flag in
         b)
            ca_build
            ;;
         a)
            ca_apply
            ;;
         i)
            ca_issue
            ;;
         A)
            ca_build
            ca_apply
            ca_issue
          ;;
         *)
            help_info;;
       esac
   done
}

main $*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值