注:以下所有题目来源于 https://blog.csdn.net/weixin_42502742/article/details/80888794
部分题目答案参考于 https://blog.csdn.net/yugemengjing/article/details/82469785

1.编写hello world
#!/bin/bash
echo “Hello world!”

2.通过位置变量Linux系统账户及密码
#!/bin/bash
if [ $# -ne 2 ]; then
echo “USAGE: UserName Password”
exit 40
fi
useradd $1
echo $2 | passwd --stdin $1
if [ $? -ne 0 ]; then
echo “Create user falid.”
exit 40
else
echo “sucessful”
fi

3.每周五使用tar命令备份/var/log下的所有日志文件
vim /etc/crontab

  • 5 root tar czf log_date +"%Y%m%d".tgz /var/log/

4.一键部署LNMP(RPM包版本)
#!/bin/bash
yum -y install nginx
yum -y install mysql
yum -y install php php-mysql

sysctl start nainx mysql
sysctl enable nainx mysql

5.实时监控本机内存和硬盘剩余空间,剩余内存小于500M,根目录剩余空间小于1000M时,发送邮件给root管理
#!/bin/bash
while true
do
memSize=free -m | sed -n '2p' | awk '{print $4}'
diskSize=df -h / | sed -n '2p' awk '{print $4}'

if [ ${memSize} -lt 500 -a ${diskSize} -lt 1000 ]ehco -额"内存剩余空间:${memSize}M\n根目录剩余空间:${diskSize}M" | mail -s "剩余空间不足" root@localhost
elif [ ${memSize} -lt 500 ];thenehco "内存剩余空间:${memSize}M" | mail -s "内存剩余空间小于500M" root@localhost
elif [ ${diskSize} -lt 1000 ];thenehco "根目录剩余空间:${diskSize}M" | mail -s "根目录剩余空间小于1000M" root@localhost
fi
sleep 5

done

6.脚本生成一个100以内的随机数,提示用户猜数字,根据用户输入的数字,提示用户猜大了还是猜小了,直到猜对。
#!/bin/bash
number=echo $(($RANDOM%100))
read -p “请输入你所猜的数字:” num
while [ $number -ne $num ]
do
if [ $number -lt $num ]; then
echo “小了,请再次输入”
else
echo “大了,请再次输入”
fi
read -p “请输入你所猜的数字:” num
done
echo “恭喜你,猜对了”

7.检测本机当前用户是否为超级管理员,如果是管理员,则使用yum安装vsftpd,如果不是则提示您非管理员(使用字符串对比版)
#!/bin/bash

if [ “$USER” == “root” ]; then
yum install vsftpd
else
echo “您不是管理员,无法安装”
fi

8.检测本机当前用户是否为超级管理员,如果是管理员,则使用yum安装vsftpd,如果不是则提示您非管理员(使用UID数字对比版)
#!/bin/bash

if [ “$UID” == “0” ]; then
yum install vsftpd
else
echo “您不是管理员,无法安装”
fi

9.编写脚本:提示用户输入用户名和密码,脚本自动创建相应的用户及配置密码。如果用户不输入用户名则提示用户必须输入用户名并退出脚本;如果用户不输入密码则同一使用12345678为密码。
#!/bin/bash

read -p “请输入用户名:” name

if [ -z ${name} ]; then
echo “您必须输入用户名,用户名不能为空。”
exit 40
fi

read -p “请输入用户的密码:” -s password

if [ -z ${password} ]; then
echo “密码输入为空,将使用默认密码”
password=“12345678”
fi

useradd ${name}
echo ${password} | passwd --stdin ${name}

if [ $? -eq 0 ]; then
echo “用户创建成功!”
fi

10.依次提示用户输入三个数,脚本根据数字大小依次排序输出三个数字。
#!/bin/bash

read -p "请输入三个整数:"num1 num2 num3

expr ${num1} + ${num2} + ${num3}

if [ $? -ne 0 ]; then
echo “请输入三个整数”
exit 1
fi

if [ $num1 -lt n u m 2 ] ; t h e n t e m p = num2 ]; then temp= num2];thentemp=num2
num2= n u m 1 n u m 1 = num1 num1= num1num1=temp
fi
if [ $num1 -lt n u m 3 ] ; t h e n t e m p = num3 ]; then temp= num3];thentemp=num3
num3= n u m 1 n u m 1 = num1 num1= num1num1=temp
fi

if [ $num2 -lt n u m 3 ] ; t h e n t e m p = num3 ]; then temp= num3];thentemp=num2
num2= n u m 3 n u m 3 = num3 num3= num3num3=temp
fi

echo “$num1 $num2 $num3”

11.编写脚本,实现人机(石头,剪刀,布)游戏
#!/bin/bash
echo “数字意义
echo “0: 石头
echo “1: 剪刀
echo “2: 布 "
echo “3: 退出
echo "
********”

while true
do
result=echo $(($RANDOM%3))
read -p “请输入一个数字[0 1 2 3]:” num
if [ $num -eq 3 ]; then
echo “游戏结束”
exit 0
fi
if [ $result -eq 0 ]; then
if [ $num -eq 0 ]; then
echo “哈哈,咱两一样”
elif [ $num -eq 1 ]; then
echo “哈哈,你输了”
elif [ $num -eq 2 ]; then
echo “哈哈,你赢了”
fi
elif [ $result -eq 1 ]; then
if [ $num -eq 0 ]; then
echo “哈哈,你赢了”
elif [ $num -eq 1 ]; then
echo “哈哈,咱两一样”
elif [ $num -eq 2 ]; then
echo “哈哈,你输了”
fi
elif [ $result -eq 2 ]; then
if [ $num -eq 0 ]; then
echo “哈哈,你输了”
elif [ $num -eq 1 ]; then
echo “哈哈,你赢了”
elif [ $num -eq 2 ]; then
echo “哈哈,咱两一样”
fi
fi
done

12.编写脚本测试192.168.4.0/24整个网段中有哪些主机处于开机状态,哪些主机处于关机状态(for版)
#!/bin/bash
declare -a active
declare -a dead
m=0
n=0
for (( i=1; i<=254; i++ ))
do
ping -c 2 192.168.4.$i > /dev/null

if [ $? -ne 0 ]; thendead[$m]="192.168.4.$i"m=$[$m + 1]
elseactive[$n]="192.168.4.$i"n=$[$n + 1]
fi

done

echo “处于开机状态的主机:”
for j in {0…${active[@]}}
do
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {active[j]}
done

echo “处于关机状态的主机:”
for k in $(seq 0 ${#dead[@]})
do
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {dead[k]}
done

13.编写脚本测试192.168.4.0/24整个网段中有哪些主机处于开机状态,哪些主机处于关机状态(while版)
#!/bin/bash
declare -a active
declare -a dead
m=0
n=0
i=1
j=0
k=0

while [ i − l t 255 ] d o p i n g − c 2192.168.4. i -lt 255 ] do ping -c 2 192.168.4. i−lt255]doping−c2192.168.4.i > /dev/null

if [ $? -ne 0 ]; thendead[$m]="192.168.4.$i"m=$[$m + 1]
elseactive[$n]="192.168.4.$i"n=$[$n + 1]
fi
i=$(($i + 1))

done

echo “处于开机状态的主机:”
while [$j -lt ${active[@]}}
do
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {active[j]}
j= [ [ [j + 1]
done

echo “处于关机状态的主机:”
while [ $k -lt ${#dead[@]}]
do
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {dead[k]}
k= ( ( (( ((k + 1))
done

14.编写脚本测试192.168.4.0/24整个网段中有哪些主机处于开机状态,哪些主机处于关机状态(多进程版)
#!/bin/bash
pingHost(){
ping -c 2 $i >/dev/null
if [ ? − e q 0 ] ; t h e n e c h o &quot; ? -eq 0 ]; then echo &quot; ?−eq0];thenecho"i is up"
else
echo “$i is down”
fi
}

for i in ( s e q 1254 ) d o n o h u p p i n g H o s t 192.168.4. (seq 1 254) do nohup pingHost 192.168.4. (seq1254)donohuppingHost192.168.4.i &

done

15.编写脚本显示进度条

16.进度条,动态时针版

17.99乘法表
#!/bin/bash
for ((i =1; i<=9; i++))
do
for ((j=1; j<=$i; j++))
do
printf "%d
%d=%-4d" $j $i [ [ [i*$j]
done
printf “\n”
done

18.使用死循环实时监测eth0网卡发送的数据包流量
#!/bin/bash

while true
do
ifconfig eth0 | grep “TX packets” | awk ‘{print “eth0---------TX---------” $5/1024/1024 “MB”}’
sleep 5
done

19.使用user.txt文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码
#!/bin/bash

userFile="/tmp/user.txt"

for userName in cat ${userFile}
do
useradd ${userName}
echo “password” | passwd --stdin ${uesrName}
if [ ? − e q 0 ] ; t h e n e c h o &quot; 用 户 ? -eq 0 ]; then echo &quot;用户 ?−eq0];thenecho"用户{userName}创建成功。"
else
echo “用户${userName}创建失败。”
fi
done

20.编写批量修改扩展名脚本,如将txt文件修改为doc文件
#!/bin/bash

tmpFile=mktemp /tmp/fileList.XXXXXX
find /tmp/test -maxdepth -type f -name “*.txt” > t m p F i l e 2 &gt; / d e v / n u l l w h i l e r e a d l i n e d o o l d N a m e = {tmpFile} 2&gt;/dev/null while read line do oldName= tmpFile2>/dev/nullwhilereadlinedooldName={line}
newName=echo ${line} | sed 's/.txt/.doc/
mv -f ${oldName} ${newName}

done < ${tmpFile}

21.使用expect工具自动交互密码远程其他主机安装httpd软件
#/bin/bash
rm -rf /home/ighe1001/.ssh/known_hosts
expect <<EOF
spawn ssh 192.168.4.233
expect “yes/no” {send “yes\r”
expect “password” {send “password\r”}
expect “#” {send “yum -y install httpd\r”}
expect “#” {send “systemctl enable httpd.service\r”}
expect “#” {send “systemctl start httpd.service\r”}
expect “#” {send “exit\r”}
EOF

22.一键部署LNMP(源码安装版)
#!/bin/bash
menu(){
clear
echo “###############—Menu—###############”
echo “# 1. Install Nginx”
echo “# 2. Install MySql”
echo “# 3. Install PHP”
echo “# 4. Exit Program”
echo “########################################”
}

choice()
{
read -p “Please choice a menu[1-9]:” select
}

install_nginx()
{
id nginx &>/dev/null
if [ $? -ne 0 ]; then
useradd -s /sbin/nologin nginx
fi

if [ -f /tmp/nginx-1.8.0.tar.gz ]; thentar -xf /tmp/nginx-1.8.0.tar.gzcd /tmp/nginx-1.8.0yum -y install gcc pcre-devel openssl-devel zlib-devel./congfigure --prefix=/usr/local/nginx --with=http_ssl_modulemakemake installin -s /usr/local/nginx/sbin/nginx /usr/sbin/
elseecho "nginx install package is not exist."
fi

}

install_mysql()
{

}

  1. 编写脚本快速克隆 KVM 虚拟

  2. 编写一个点名器脚
    #!/bin/bash

echo “"
echo “*
1:继续

echo “*2:退出
echo "

nameListFile="/tmp/test/nameListFile.txt"
##人数
classmatesNum=60

while true
do
randomNum=echo $(($RANDOM%${number} + 1))
classmateName=sed -n '${randomNum}p'
echo “${randomNum}”
read -p “请输入操作码(1或者2):” choice
if [ ${choice} -ne 1 ]; thne
echo “点名结束”
break
fi
done

  1. 查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计
    #!/bin/bash
    ipList=netstat -natu | grep -v grep | grep -w "ESTABLISHED" | awk -F"[ :]+" '{print $6}' | sort | uniq
    echo “连接本机的远程IP:”
    echo “${ipList}”

  2. 对 100 以内的所有正整数相加求和(1+2+3+4…+100)
    #!/bin/bash
    sum=0
    for ((i=1; i<=100; i++))
    do
    sum= [ [ [{sum} + ${i}]
    done

echo “sum=${sum}”

  1. 统计 13:30 到 14:30 所有访问 apache 服务器的请求有多少
    #!/bin/bash
    startLine=grep -n "2019:13:30" | awk -F: '{print $1}'
    endLine=grep -n "2019:14:31" | awk -F: '{print $1}'
    endLine= [ [ [{endLine} -1]
    accessNum=sed '${startLine},${endLine}p' /var/log/httpd/access.log | wc-l
    echo “请求数:”
    echo ${accessNum}

  2. 统计 13:30 到 14:30 所有访问本机 Aapche 服务器的远程 IP 地址是什
    #!/bin/bash
    startLine=grep -n "2019:13:30" | awk -F: '{print $1}'
    endLine=grep -n "2019:14:31" | awk -F: '{print $1}'
    endLine= [ [ [{endLine} -1]
    ipList=sed '${startLine},${endLine}p' /var/log/httpd/access.log | awk '{ptint $1}' | sort | uniq
    echo “远程IP地址:”
    echo ${ipList}

  3. 打印国际象棋棋盘,效果如下图

  4. 统计每个远程 IP 访问了本机 apache 几次?
    #!/bin/bash
    startLine=grep -n "2019:13:30" | awk -F: '{print $1}'
    endLine=grep -n "2019:14:31" | awk -F: '{print $1}'
    endLine= [ [ [{endLine} -1]
    ipList=sed '${startLine},${endLine}p' /var/log/httpd/access.log | awk '{ptint $1}' | sort | uniq -c
    echo “远程IP地址 访问次数”
    echo ${ipList} | awk ‘{print $2," ", $1}’

  5. 统计当前 Linux 系统中可以登录计算机的账户有多少
    #!/bin/bash
    userNum=grep -c "bash$" /etc/passwd
    echo “可以登录计算机的账户数”?{userNum}

  6. 统计/var/log 有多少个文件,并显示这些文件
    #!/bin/bash

tmpFile=mktemp /tmp/temp.XXXXXX

fileAccount=`find /var/log/ -type f -exec ls -l {} ; > ${tmpFile} 2>/dev/null

fileNumber=wc -l ${tmpFile}
echo “/var/log下共有${fileNumber}各文件”
echo “文件详细信息如下:”
cat ${tmpFile}
if [ $? -eq 0 ]; then
rm -f ${tmpFile}
fi

  1. 自动为其他脚本添加解释器信息#!/bin/bash,如脚本名为 test.sh 则效果如下

#./test.sh abc.sh 自动为 abc.sh 添加解释器信息
#!/bin/bash
grep “#!/bin/bash” fileName
if [ $? -ne 0 ]; then
sed ‘1i#!/bin/bash’ fileName
fi

  1. 自动化部署 varnish 源码包软

  2. 编写 nginx 启动脚
    #!/bin/bash
    proggram="/usr/local/nginx/sbin/nginx"
    pid="/usr/local/nginx/logs/nginx.pid"

start(){
if [ -f ${pid} ]; then
echo “nginx is running.”
else
${program}
fi
}

stop(){
if [ -f ${pid} ]; then
${program} -s stop
echo “nginx stop ok.”
else
echo “nginx is stop.”
fi
}
status(){
if [ -f ${pid} ]; then
echo “nginx is running.”
else
echo “nginx is stopping.”
fi
}

case $1 in
start)
start();;
stop)
stop();;
status)
status();;
*)
echo “parameter error”
esac

  1. 自动对磁盘分区、格式化、挂载
    #!/bin/bash
    fdisk /dev/sda << EOF
    n
    p
    1
    wq
    EOF

mkfs.xfs /dev/sda1
mkdir -p /mnt/test
echo “/dev/sda1 /mnt/test xfs defaults 1 2” >> /etc/fstab
mount -a

  1. 自动优化 Linux 内核参数

  2. 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难
    #!/bin/bash
    time=date +%Y%m%d%H%S
    logFile=“var/log/nginx/access.log”
    cp -p ${logFile} l o g F i l e . {logFile}. logFile.{time}
    cat /dev/null > ${logFile}

echo “0 4 * * * root /bin/bash XXX.sh >/dev/null”

  1. 检测 MySQL 数据库连接数
    #!/bin/bash
    logFile="/var/log/mysql_count.log"
    uesr=“root”
    password=“pasword”
    while true
    do
    sleep 5
    count=0
    count=mysqladmin -u "${user}" -p "${password}" status | awk '{print $4}'
    echo "date +"%Y%m%d %H:%S" 并发连接数为:${count}" >> ${logFile}
    done

  2. 根据 md5 校验码,检测文件是否被修
    md5sum destFile > resultFile
    md5sum -c [ [ [{year}%4] -eq 0

  3. 检测 MySQL 服务是否存
    lsof -i:3306
    ps -ef | grep -v grep | grep -i mysql
    netstat -ntulp | grep -v grep |grep -i mysql

  4. 备份 MySQL 的 shell 脚本(mysqldump 版本)
    #!/bin/bash
    uesr=“root”
    password=“pasword”
    dbName=“dbname”
    [ ! -d /mysqlbackup ] && mkdir /mysqlbackup
    mysqldump -u “ u s e r &quot; − p &quot; {user}&quot; -p &quot; user"−p"{password} “ d b N a m e &quot; &gt; / m y s q l b a c k u p / &quot; {dbName}&quot; &gt; /mysqlbackup/&quot; dbName">/mysqlbackup/"{dbName}”_date +"%Y%m%d%H%S".sql”

  5. 将文件中所有的小写字母转换为大写字
    cat testFile.txt | tr [:lower:] [:upper:]

  6. 非交互自动生成 SSH 密钥文
    ssh-keygen -t rsa -f ~/.ssh/id_rsa

  7. 检查特定的软件包是否已经安
    rpm -qa | grep packeageName
    yum --list

  8. 监控 HTTP 服务器的状态(测试返回码)
    curl -I -s -w %{http_code} URL -o /dev/null

  9. 自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
    #!/bin/bash
    service=“tomcat httpd ssh”
    port=“8009 80 22”
    for i in ${service}
    do
    echo "Adding i s e r v i c e t o f i r e w a l l &quot; f i r e w a l l − c m d − − a d d − s e r v i c e = i service to firewall&quot; firewall-cmd --add-service= iservicetofirewall"firewall−cmd−−add−service={i}
    done

do
echo "Adding i p o r t t o f i r e w a l l &quot; f i r e w a l l − c m d − − a d d − p o r t = i port to firewall&quot; firewall-cmd --add-port= iporttofirewall"firewall−cmd−−add−port={i}/tcp
done

firewall-cmd --runtime-to-permanent

  1. 使用脚本自动创建逻辑卷
    a.磁盘分区 fdisk /dev/sdx
    b.pvcreate /dev/sdxn
    c.vgcreate
    d.kvcreate
    e.格式化
    f.mount

  2. 显示 CPU 厂商信息
    grep “vendor_id” /proc/cpuinfo | awk ‘{print $NF}’

  3. 删除某个目录下大小为 0 的文件 #自己创建文件完成模拟
    find /tmp -type -f -size 0 -exec rm -f {} ;

  4. 查找 Linux 系统中的僵尸进程
    ps -efl | awk ‘{if($2==“D”) print “PID:”$4}’

  5. 提示用户输入年份后测试判断是否为闰年
    #!/bin/bash

read -p “Please input then year:” year
if [ [ [ [{year}%4] -eq 0 -a [ [ [{year}%100] -ne 0 -o [ [ [{year}%400] -eq 0 ]; then
echo “${year}是闰年”
fi

  1. 生成随机密码(urandom 版本)
    cat /dev/urandom | tr cd [:alnum:] | head -c 10

  2. 生成随机密码(字串截取版本)
    echo $RANDOM | md5sum | cut -c1-8

  3. 生成随机密码(UUID 版本,16 进制密码)
    uuidgen | head -c 8

  4. 生成随机密码(进程 ID 版本,数字密码)
    echo $$ | sha512sum | tr -cd [:digit:] | head -c 10

  5. 测试用户名与密码是否正确

  6. 循环测试用户名与密码是否正确

  7. Shell 脚本的 fork 炸弹

  8. 批量下载有序文件(pdf、图片、视频等等)

  9. 显示当前计算机中所有账户的用户名称
    #!/bin/bash
    nameList=awk -F: '{print $1}'
    i=0
    for name in $(echo ${nameList})
    do
    if [ [ [ [i%5] -eq 0 ];then
    echo
    i= [ [ [i + 1]
    fi
    echo "${name} "
    done

  10. 制定目录路径,脚本自动将该目录使用 tar 命令打包备份到/data 目录
    #!/bin/bash
    time=date +"%Y%m%d"
    destFile="/var/log/*.log"
    tgzFile="/data/"${time}.tgz
    tar czf ${tgzFile} ${destFile}

  11. 显示进度条(回旋镖版)

  12. 安装 LAMP 环境(yum 版本)

  13. 循环关闭局域网中所有主机
    #!/bin/bash
    for i in {1…254}
    do
    if [ i − e q 100 ] ; t h e n c o n t i n u e f i s s h u s e r N a m e @ 192.168.125. i -eq 100 ]; then continue fi ssh userName@192.168.125. i−eq100];thencontinuefisshuserName@192.168.125.{i} shutdown -h now
    echo “server is shutdoening…”
    done

  14. 获取本机 MAC 地址
    #!/bin/bash
    macIP=ifconfig | grep ether | awk '{print $2}'
    echo “Mac address as follow:”
    for mac in ${macIP}
    do
    echo ${mac}
    done

  15. 自动配置 rsynd 服务器的配置文件 rsyncd.conf

  16. 设置 Python 支持自动命令补齐功能

  17. 自动修改计划任务配置文件
    echo “min hour day month week user command”

  18. 使用脚本循环创建三位数字的文本文件(111-999 的文件)
    #!/bin/bash
    for ((i=111; i<=999; i++))
    do
    touch $i > /dev/null
    if [ $? -eq 0 ]; then
    echo “File ${i} is created.”
    else
    echo “File ${i} is not created.”
    fi
    done

  19. 找出/etc/passwd 中能登录的用户,并将对应在/etc/shadow 中第二列密码提出处理
    #/bin/bash
    userList=grep "/bin/bash$" | awk -F: ''{print $1}
    for user in $(echo ${userList})
    do
    password=grep ${user} /etc/shadow | awk -F: '{print $2}'
    echo “User: u s e r P a s s w o r d : {user} Password: userPassword:{password}”
    password=""
    done

  20. 统计/etc/passwd 中 root 出现的次数
    grep -o “root” /etc/passwd

  21. 统计 Linux 进程相关数量信息
    #!/bin/bash
    ##R:running
    ##S:sleep
    ##T:stop
    ##Z:zombie

Rcount=0
Scount=0
Tcount=0
Zcount=0

for status in $(ps -efl | awk ‘{print $2}’)
do
case s t a t u s i n R ) R c o u n t = {status} in R) Rcount= statusinR)Rcount=[ R c o u n t + 1 ] ; ; S ) S c o u n t = {Rcount} + 1];; S) Scount= Rcount+1];;S)Scount=[ S c o u n t + 1 ] ; ; T ) T c o u n t = {Scount} + 1];; T) Tcount= Scount+1];;T)Tcount=[ T c o u n t + 1 ] ; ; Z ) Z c o u n t = {Tcount} + 1];; Z) Zcount= Tcount+1];;Z)Zcount=[ Z c o u n t + 1 ] e s c a d o n e e c h o &quot; 统 计 结 果 如 下 : &quot; e c h o &quot; R : {Zcount} + 1] esca done echo &quot;统计结果如下:&quot; echo &quot;R: Zcount+1]escadoneecho"统计结果如下:"echo"R:{Rcount}"
echo “S: S c o u n t &quot; e c h o &quot; T : {Scount}&quot; echo &quot;T: Scount"echo"T:{Tcount}”
echo “Z:${Zcount}”

  1. 从键盘读取一个论坛积分,判断论坛用户等级
    #!/bin/bash
    read -p "请输入积分数:"number
    if [ ${number} -le 60 ]; then
    echo “初级用户”
    elif [ ${number} -le 70 ]; then
    echo “中级用户”
    elif [ ${number} -le 80 ]; then
    echo “高级用户”
    elif [ ${number} -le 90 ]; then
    echo “星级用户”
    else
    echo “VIP用户”
    fi

  2. 判断用户输入的数据类型(字母、数字或其他)
    #!/bin/bash
    read -p “Please Input:” input
    if [ -z $(echo i n p u t ∣ t r − c d [ : d i g i t : ] ) ] ; t h e n e c h o &quot; {input} | tr -cd [:digit:]) ]; then echo &quot; input∣tr−cd[:digit:])];thenecho"{input} is numbers"
    elif [ -z $(echo i n p u t ∣ t r − c d [ : a l p h a : ] ) ] ; t h e n e c h o &quot; {input} | tr -cd [:alpha:]) ]; then echo &quot; input∣tr−cd[:alpha:])];thenecho"{input} is letters"
    elif [ -z $(echo i n p u t ∣ t r − c d [ : a l n u m : ] ) ] ; t h e n e c h o &quot; {input} | tr -cd [:alnum:]) ]; then echo &quot; input∣tr−cd[:alnum:])];thenecho"{input} is chars"
    else
    echo “It is others.”
    fi

  3. 显示进度条(数字版)
    #!/bin/bash
    for i in {1…1000}
    do
    echo -n “$i”
    if [ [ [ [i%${COLUMNS}] -eq 0 ]; then
    echo
    fi
    done

  4. 打印斐波那契数列(该数列的特点是后一个数字,永远都是前 2 个数字之和)
    #!/bin/bash
    for ((i=1; i<=100; i++))
    do
    if [ $i - le 2 ]; then
    printf “%d” 1
    m=1
    n=1
    else
    printf “%d” [ [ [m + n ] m = n] m= n]m=n
    n= [ [ [m + $n]
    fi
    done

  5. 判断用户输入的是 Yes 或 NO
    #!/bin/bash
    read -p “Please input your anwser:” answer
    ret=echo ${answer} | tr [:upper:] [:lower:]
    case ${ret} in
    y|yes)
    echo “You answer is YES.”
    ;;
    n|no)
    echo “You answer is NO.”
    ;;
    *)
    echo “Please input yes/YES/y/Y/no/NO/n/N.”
    exit 1
    ;;
    esca

  6. 显示本机 Linux 系统上所有开放的端口列表
    netstat -ntupl | sed -n ‘3,$p’ | awk -F"[ :]+" ‘{print $5}’ | sort -n | uniq

  7. 将 Linux 系统中 UID 大于等于 1000 的普通用户都删除
    #!/bin/bash
    userList=cat /etc/passwd | awk -F: '{if($3 >= 1000) print $1}'
    for user in echo ${userList}
    do
    userdel -r ${user}
    done

  8. 使用脚本开启关闭虚拟机

  9. 调整虚拟机内存参数的 shell 脚本

  10. 查看 KVM 虚拟机中的网卡信息(不需要进入启动或进入虚拟机)

  11. 不登陆虚拟机,修改虚拟机网卡 IP 地址、

  12. 破解虚拟机密码,无密码登陆虚拟机系统

  13. Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本

  14. 一键部署 memcached

  15. 一键配置 VNC 远程桌面服务器(无密码版本)

  16. 关闭 SELinux
    setenforce disabled
    vim /etc/selinux/config; shutdown -r now

  17. 查看所有虚拟机磁盘使用量以及 CPU 使用量信息
    df -h
    sar
    vmstat
    top

  18. 使用 shell 脚本打印如下图形

  19. 根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动
    #!/bin/bash
    hour=date +"%H"
    if [ ${hour} - le 8 ]; then
    echo “早上好”
    elif [ ${hour} - le 12 ]; then
    echo “上午好”
    elif [ ${hour} - le 14 ]; then
    echo “中午好”
    elif [ ${hour} - le 18 ]; then
    echo “下午好”
    else
    echo “晚上好”
    fi

  20. 读取用户输入的账户名称,将账户名写入到数组保存
    #!/bin/bash
    declare -a userList
    i=0
    while true
    do
    read -p “Please enter user name(1:exit):” userList[ i ] i = i] i= i]i=[ i + 1 ] i f [ u s e r L i s t [ i + 1] if [ userList[ i+1]if[userList[i] == “1” ]; then
    unset userList[$i]
    exit
    fi
    done

  21. 判断文件或目录是否存在
    #!/bin/bash
    fileName=“fileNmae”
    dirName=“dirName”
    if [ -f f i l e N a m e ] ; t h e n e c h o &quot; {fileName} ]; then echo &quot; fileName];thenecho"{fileName} is exist."
    else
    echo “${fileName} is not exist.”
    fi

if [ -d d i r N a m e ] ; t h e n e c h o &quot; {dirName} ]; then echo &quot; dirName];thenecho"{dirName} is exist."
else
echo “${dirName} is not exist.”
fi

  1. 打印各种时间格式
    man date

  2. 使用 egrep 过滤 MAC 地址

  3. 统计双色球各个数字的中奖概率

  4. 生成自签名私钥和证书

  5. 使用 awk 编写的 wc 程

shell编程(练习笔记)相关推荐

  1. Shell 编程进阶笔记

    这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...

  2. [SuperM]Shell编程课堂笔记+PPT总结

    [SuperM]Shell编程课堂笔记+PPT总结 转载于:https://www.cnblogs.com/DreamDrive/p/4800818.html

  3. SHELL编程学习笔记

    SHELL编程学习笔记 本文描述unix shell的各种应用实例,根据查阅资料和自我总结,作为自己今后复习的模板.本文搜集整理常用的shell应用实例,以例子详述unixshell部分命令的使用,着 ...

  4. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  5. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  6. Linux Shell编程学习笔记(2)

    Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量   Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...

  7. Linux Shell编程学习笔记(3)

    Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量   什么是位置参数?   位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...

  8. Linux7.6—Shell编程 学习笔记 第四章:系统任务设置

    Linux7.6-Shell编程 第四章:系统任务设置 文章目录 Linux7.6-Shell编程 一.系统启动流程 二.系统服务 三.开机自启动服务 四.定时任务 一.系统启动流程 启动计算机的硬件 ...

  9. shell编程基础笔记

    第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...

  10. linux shell编程入门笔记

    shell编程的重要性: 对于hadoop程序员,通常需要熟悉shell编程,因为shell可以非常方便的运行程序代码. shell文件格式: 文件名后缀通常是.sh #!/bin/sh[先指定文件下 ...

最新文章

  1. 电子书下载:Moving to Microsoft Visual Studio 2010
  2. Arrays常见用法
  3. boost::fibers::algo::shared_work >用法的测试程序
  4. 「技美之路」图形 1.1 渲染流水线
  5. 多媒体技术生态未来的三个关键要素
  6. Chrome source code map - fail - cannot debug
  7. php strtoup,PHP 7 的几处函数安全小变化
  8. windows下环境变量配置后没生效,不重启电脑的解决办法
  9. 开年福利!OpenMMLab 全新企划,等你来
  10. Arcgis Javascript那些事儿(九)--自定义infowindow
  11. 3600000毫秒等于多少小时_毫秒换算(秒与毫秒换算)
  12. 计算机网络体系结构(详图)
  13. 华为悦盒ec6108v9修改mac、sn、stbid修改实现移植到性能好的设备
  14. 【LeetCode-SQL】1384. 按年度列出销售总额
  15. 锐龙r7 4800U和i7-10710U 哪个好
  16. ue4游戏传送门实现
  17. 芯擎科技正式发布“龍鹰一号”,引领“中国智造”智能座舱芯片新篇章
  18. Mac--技巧:修复“闪烁的问号”错误提示
  19. 全球最易受黑客攻击的国家:中国排第五
  20. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)

热门文章

  1. java查找字符串中包含子字符串的个数,灵活运用String方法,3种方法的代码实现!
  2. 2022最新出炉的软件测试面试宝典附答案
  3. 基于jupyter编程环境下——Python入门:列表4
  4. Unity3D学习(3)之基于鼠标点击的3D版牧师与魔鬼
  5. 指令是计算机用以控制各部件协调动作的指令,(10)计算机指令是计算机用以控制各部件协调动作的命令...
  6. grep 根据时间模糊查询关键字数据
  7. Prototype ajax get,post例子
  8. Jest测试框架入门之Mock
  9. kooboo中vue router探索
  10. 森海塞尔mx350 vs 魅族PT650