linux脚本编程for,谢烟客---------Linux之bash脚本编程---if补充和for循环
发布日期:2021-06-24 12:11:12 浏览次数:2 分类:技术文章

本文共 5346 字,大约阅读时间需要 17 分钟。

if 单分支、双分支、多分支、嵌套if语句

for 列表表示

1、给出列表

2、{1..100}

3、命令引用:

1)$(ls DIR)

2)$(1 1 100)

4、glob

5、$*,$@

condition

declare -i -r -x

readonly

export ,env

set,printenv,env,export,readonly -p

bash:过程式编程,为了完成更复杂的任务,支持顺序执行、选择执行、循环执行

顺序执行:从左而右,依次执行命令。

选择执行:依据condition(条件)的执行状态结果,选择执行不同的代码片段。

循环执行:依据condition(条件)的执行状态结果,决定是否进入循环。

condition:

ture: 表示条件状态结果为0

false: 表示条件执行状态结果非0

if

单分支、双分支、多分支、嵌套if语句1、单分支结构

if condition; then

if-ture

fi

2、双分支结构

if condition; then

if-ture

else

if-false

fi

3、多分支结构

if condition; then

if-ture

elif condition; then

if-ture

elif condition; then

if-ture

....

else

all-false

fi

4、嵌套if语句

if condition; then

if condition; then

if-ture

fi

fi

if condition; then

if condition; then

if-ture

fi

else

if condition; then

if-ture

fi

fi

for

列表循环

格式1、格式一

for 变量名 in 列表; do

循环体

done

2、格式二

for 变量名 in 列表

do

循环休

done

3、格式三,命令行中

for 变量名 in 列表; do 循环体; done

列表表示方法

1、给出列表

2、{首位..尾数} ,例如 1到100表示为" {1..100}"

3、命令引用:

1)$(ls DIR)

2)$(expr [首数 [步长]] 尾数),例如 1到100表示为"$(1 1 100)"

4、通配符, glob . 例如 /var目录下一级子目录中的所有文件和目录的绝对路径。/var/*

5、变量引用。 $* 向脚本传递的所有参数,整体。$@向脚本传递的所有参数,每个独立

脚本格式#!/bin/bash

# Version: major.minor.release

# Author:

# Desc:

脚本语法检测# bash -n file.sh

调试脚本# bash -x file.sh

记录脚本退出状态码INTEVAL=$? (变量引用实现赋值)

用户邮箱位置/var/mail

定义变量的类型整型: # declare -i var

定义变量1、环境变量

# env var

# declare -x var

# export var

2、只读变量

# declare -r var

# readonly var

显示本地和环境变量# set

显示环境变量# export

# env

# printenv

显示只读变量# readonly -p

示例一:交互式给出一个文件路径,判断文件的类型#!/bin/bash

# Version: 0.0.1

# Author: Lcc.org

# Description:testing

read -t 5 -p 'Enter a file path: ' filename

if [ -z "$filename" ]; then

echo "Enter a file path"

exit 1

fi

if [ ! -e $filename ]; then

echo "No such file."

exit 2

fi

if [ -f $filename ]; then

echo "Common file."

elif [ -h $filename ]; then

echo "Symbolic file."

elif [ -d $filename ]; then

echo "Directory."

else

echo "Other type."

fi

示例二:添加10个用户,user1 ,,....user10,密码同用户名(只有root能改密码)。

**只有root能修改密码**1、列表,直接给出

#!/bin/bash

# Version: 0.0.2

# Author: Lcc.org

# Description: add user

##避免执行命令的用户非root用户,非root用户是不能修改密码的。

if [ $UID -ne 0 ]; then

echo "Only root."

exit 1

fi

##以给出列表的方式,循环。当列表循环完毕时,循环结束

for i in user1 user2 user3 user4 user5 user6 user7 user8 user9 user10; do

## 判断用户是否存在。

if id $i &> /dev/null; then

## 执行状态结果为0时,条件为真时,说明什么呢?

echo "$i exist"

else

## 用户不存在时,即可添加用户

if ! useradd $i 2> /dev/null; then

## 添加不成功时, 组合中,对命令或测试条件取反。

echo "$i is outside the law"

else

## 用户名,正常,能正常添加用户,则可以给其添加密码

echo "$i" | passwd --stdin $i > /dev/null 2>&1

## 数值测试添加密码的执行状态结果。

if [ $? -ne 0 ]; then

## 结果不为0,表示执行不成功

echo "password is not legal"

fi

fi

fi

done

2、{1..10}

#!/bin/bash

# Version: 0.0.3

# Author: Lcc.org

# Description: {}表示列表

[ ! $UID -eq 0 ] && echo "Only root."  && exit 1

for i in {1..10}

do

id user$i &> /dev/null

if [ $? -eq 0 ]; then

echo "user$i exist"

else

useradd user$i 2> /dev/null

[ $? -ne 0 ] && echo "UserName is not legal" && continue

echo "user${i}" | passwd --stdin user${i} &> /dev/null

[ $? -ne 0 ] && echo "Password is not legal"

echo "Add user user$i finished"

fi

done

3、命令引用

#!/bin/bash

# Version: 0.0.4

# Author: Lcc.org

# Description:  $(seq 10)表示列表

[ ! $UID -eq 0 ] && echo "Only root."  && exit 1

for i in $(seq 10)

do

id user$i &> /dev/null

if [ $? -eq 0 ]; then

echo "user$i exist"

else

useradd user$i 2> /dev/null

[ $? -ne 0 ] && echo "UserName is not legal" && continue

echo "user${i}" | passwd --stdin user${i} &> /dev/null

[ $? -ne 0 ] && echo "Password is not legal"

echo "Add user user$i finished"

fi

done

4、特殊变量

#!/bin/bash

# Version: 0.0.5

# Author: Lcc.org

# Description: $*,$@表示列表

[ ! $UID -eq 0 ] && echo "Only root."  && exit 1

for i in $*

do

id $i &> /dev/null

if [ $? -eq 0 ]; then

echo "$i exist"

else

useradd $i 2> /dev/null

[ $? -ne 0 ] && echo "UserName is not legal" && continue

echo "${i}" | passwd --stdin ${i} &> /dev/null

[ $? -ne 0 ] && echo "Password is not legal"

echo "Add user $i finished"

fi

done

示例三:判断/var/目录下每个文件的类型方法一

#!/bin/bash

# Version: 0.0.6

# Author: Lcc.org

# Description: file type

for i in /var/*; do

if [ -f $i ]; then

echo "Common file."

elif [ -L $i ]; then

echo "Symbolic file."

elif [ -d $i ]; then

echo "Directory."

else

echo "Other type"

fi

done

方法二:

#!/bin/bash

# Version: 0.0.7

# Author: Lcc.org

# Description: Galaxy

cd /var

for i in $(ls /var); do

if [ -f $i ]; then

echo "Common file."

elif [ -L $i ]; then

echo "Symbolic file."

elif [ -d $i ]; then

echo "Directory."

else

echo "Other type"

fi

done

方法三:

#!/bin/bash

# Version: 0.0.8

# Author: Lcc.org

# Description: Add DIR

for i in $(ls /var); do

if [ -f /var/$i ]; then

echo "Common file"

elif [ -L /var/$i ]; then

echo "Symbolic file"

elif [ -d /var/$i ]; then

echo "Directory"

else

echo "Other type"

fi

done

示例四:tcp协议下处于ESTABLISH状态的有多少个,LiSTEN有多少个,有几种状态方法一:

#!/bin/bash

# Version: 0.0.9

# Author: Lcc.org

# Description: statusTCP

declare -i listen=0

declare -i established=0

declare -i other=0

for i in $(netstat -tan | grep '^tcp\>' | tr -s ' ' | cut -d' ' -f6); do

if [ "$i" == "LISTEN" ]; then

let listen++

elif [ "$i" == "ESTABLISHED" ]; then

let established++

else

let other++

fi

done

echo -e "LISTEN statu: $listen\nESTABLISHED statu: $established\nOther status: $other\nTotal type: $(netstat -tan | grep '^tcp\>' | tr -s ' ' | cut -d' ' -f6 | sort -u | wc -l)"

方法二:

# netstat -tan | grep '^tcp\>' | awk -v FS=' ' '{ARRAY[$NF]++}END{for(i in ARRAY){print i,ARRAY[i]}}'

LISTEN 12

CLOSE_WAIT 1

ESTABLISHED 3

转载地址:https://blog.csdn.net/weixin_32661831/article/details/116702799 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux期中测试答案 版本号,Linux认证测试题含答案
下一篇:linux恢复fat文件系统,使用‘fsck’修复Linux中文件系统错误的方法

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月14日 03时46分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Java Web——文件下载时中文文件名乱码问题解决方案 2019-04-28
Spring Boot——[Unable to start LiveReload server]解决方案 2019-04-28
Spring Boot——[java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration]解决方案 2019-04-28
Spring Boot——[JPA 无法注入 JpaRepository 子接口问题]解决方案 2019-04-28
Vue——组件化开发DEMO 2019-04-28
Spring Boot——基于OkHTTP的GitHub第三方登录DEMO 2019-04-28
Spring Boot——MyBatis配置带下划线命名的字段自动转换驼峰命名解决方案 2019-04-28
Spring Boot——读取.properties配置文件解决方案 2019-04-28
Thymeleaf——访问静态资源(static)解决方案 2019-04-28
Bootstrap4——字体大小根据屏幕改变解决方案 2019-04-28
Alibaba Cloud Toolkit——简介 2019-04-28
Android——浙理体育(飞翔的红蜻蜓)反编译分析 2019-04-28
JAVA——GZIP压缩与解压缩 2019-04-28
PTA——编译错误[error: redefinition of ‘main’]解决方案 2019-04-28
CTF Geek Challenge——第十一届极客大挑战Web Write Up 2019-04-28
CTF Geek Challenge——第十一届极客大挑战Crypto Write Up 2019-04-28
CTF Geek Challenge——第十一届极客大挑战Pwm Write Up 2019-04-28
CTF Geek Challenge——第十一届极客大挑战Misc Write Up 2019-04-28
《服务外包概论》实验报告——版本管理与控制工具的综合应用 2019-04-28
Spring Boot 内置Tomcat——IntelliJ IDEA中配置模块目录设为文档根目录(DocumentRoot)解决方案 2019-04-28