Shell基础-2

Tutorial: Shell基础 Category: Shell Published: 2026-04-07 13:58:25 Views: 23 Likes: 0 Comments: 0

Shell 基础-2

  1. 九九乘法表
#!/bin/bash

for i in $(seq 9); do
    for j in $(seq $i); do
        echo -n "$i*$j=$((i * j)) "
    done
    echo
done

: <<EOF
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
EOF
  1. 批量修改后缀
#!/bin/bash

# 执行脚本时, 需要给脚本添加位置参数 带参
for i in "ls *.$1"; do
    # 去尾
    mv $i ${i%.*}.$2
done

  1. 配置免密登录
#!/usr/bin/expect

VMS=(
    192.168.0.170
    192.168.0.171
    192.168.0.172
    192.168.0.173
    192.168.0.174
)

SERVER="192.168.0.175"
SERVER_PWD="123456"
CLIENT_PWD="654321"

function config_client() {
    for vm in ${!VMS[@]}; do
        sleep 1
        expect <<EOF
        spawn ssh ${VMS[$vm]}
        expect "yes/no"             {send "yes\r"}
        expect "assword"            {send "${CLIENT_PWD}\r"}
        expect "#"                  {send "rm -rf ~/.ssh/*\r"}
        expect "#"                  {send "ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q\r"}
        expect "#"                  {send "ssh-copy-id ${SERVER}\r"}
        expect "yes/no"             {send "yes\r"}
        expect "assword"            {send "${SERVER_PWD}\r"}
        expect "#"                  {send "exit\r"}
        expect "#"                  {send "exit\r"}
EOF
    done
}

function send_public_key() {
    for vm in ${!VMS[@]}; do
        sleep 1
        expect <<EOF
        spawn ssh-copy-id ${VMS[$vm]}
        expect "assword"            {send "${CLIENT_PWD}\r"}
        expect "#"                  {send "echo\r"}
EOF
    done
}

function main() {
    rm -rf ~/.ssh/*
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    config_client
    send_public_key
}

main
  1. 100 求和
#!/bin/bash

echo $(seq 100) | awk 'BEGIN{sum = 0}{for(i = 0; i <= $NF; i++) sum+=i } END{print sum}'

  1. 打印棋盘
#!/bin/bash

for i in {1..8}; do
    for j in {1..8}; do
        sum=$((i + j))
        if [ $((sum % 2)) -eq 0 ]; then
            echo -ne "\033[46m \033[0m"
        else
            echo -ne "\033[47m \033[0m"
        fi
    done
    echo
done