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

linux脚本编程for,谢烟客---------Linux之bash脚本编程---if补充和for循环相关推荐

  1. aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本

    我正在编写一个自动安装和配置AWS CLI工具的bash脚本.我可以安装AWS CLI工具,但无法配置它. 我的脚本是这样的: #!/bin/bash wget https://s3.amazonaw ...

  2. linux脚本里用expect,如何在bash脚本中使用expect

    这是我在 following bash脚本中使用的代码片段: for user_input in `awk '{print}' testfile_$$.txt` do ipaddress=`echo ...

  3. bash脚本创建变量_创建一个Bash脚本模板

    bash脚本创建变量 在本系列的第一篇文章中,您创建了一个很小的单行Bash脚本,并探讨了创建Shell脚本的原因,以及为什么它们是系统管理员而非编译程序最有效的选择. 在第二篇文章中,您将开始创建一 ...

  4. sh脚本和bash脚本_我是如何开始使用bash脚本的

    sh脚本和bash脚本 前几天我写了一个剧本. 对于某些人来说,这句话听起来没什么大不了的. 对于其他人,我知道您在外面,那句话很重要. 你看,我不是程序员. 我是作家 我需要解决的问题 我的问题很简 ...

  5. sh脚本和bash脚本_使用此简单的Bash脚本在家打印双面文档

    sh脚本和bash脚本 我们家里有一台激光打印机. 惠普(Hewlett Packard)LaserJet Pro CP1525nw彩色打印机是一种较旧的型号,但它是一台出色的打印机,可以可靠地进行彩 ...

  6. bash 获取脚本存放路径_如何获取Bash脚本自己的路径

    bash 获取脚本存放路径 Bash script may need to get its own path. In normal Bash script, $0 is the path to the ...

  7. Linux初级运维(七)——bash脚本编程(常见测试)

    一.bash中常用的条件测试 测试方法: [ expression ] [[expression]] test expression 1.整数测试 -gt:大于 -le:小于等于 -ne:不等于 -e ...

  8. linux里面的注释命令是啥,bash脚本中单行及多行注释方法

    一:单行注释直接在行首加"#" 如:#我是注释行 二.多行注释利用:空命令 注意:以下方法中如果在注释中出现反引号引用的命令将会执行,存在风险. 1.把输入重定义到前面的命令,但是 ...

  9. Linux自定义动态壁纸,一个简单的bash脚本可根据特定条件设置动态壁纸

    dynamic-wallpaper

  10. Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory

    问题描述:Linux中采用绝对路径执行Bash脚本,报错-bash: /home/xxx.sh: /bin/bash^M: bad interpreter: No such file or direc ...

最新文章

  1. 当年修复Linux启动菜单的笔记
  2. MVC模式和Maven项目构建
  3. c++中union的使用,看高手们如何解释的
  4. Spring MVC Boot Cloud 技术教程汇总(长期更新)
  5. 1月31日 资源网站(素材模板)
  6. Filter in Servlet
  7. Python Lambda 的简单用法
  8. Advanced Wlan Attacks (RADIUS)
  9. Mysql 5.7 for windows 免安装版(解压版)安装和配置
  10. php中编码转换,php程序中的编码转换
  11. edem颗粒替换_Altair EDEM Professional 2020.2安装教程(附替换补丁)
  12. Pytorch是什么?Pytorch能用来干什么?
  13. 网站性能优化三大策略
  14. MySQL的基础汇总(包含60道练习题)~~
  15. 我用Three.js创作游戏(一)
  16. 最新小程序反编译详细教程,亲测可用
  17. Terraform 系列-什么是 IaC?
  18. 浏览器调起app应用方法
  19. SpringBoot读取Word文档
  20. 火车头图片储存-火车头采集图片储存插件及教程

热门文章

  1. 推荐几款牛逼Chrome网页翻译插件,功能强大内容惊艳,务必低调使用
  2. python清除所有变量_python清理变量
  3. 微软ImageX工具*.wim文件的备份与恢复
  4. Springboot发送手机短信验证码并且校验
  5. 施密特正交化过程编程c语言,利用C程序编写格拉姆-施密特正交化的过程.docx
  6. mysql在子查询中使用自定义变量和条件语句实现函数效果的查询语句
  7. 视频教程-【直通华为HCNA/HCNP系列R篇7】可靠性功能原理及配置与管理-华为认证
  8. java推送微信消息换行_微信公众号开发:回复文本消息换行的三种方式
  9. c语言实现面向对象OOC
  10. 个人支付微信支付宝接口