read Python中用input()函数,进行输入;
如果默认值过多,最后所有的值都会被赋予给最后一个变量;
如果默认值过少,多余的变量则为空值;
echo "请输入一个目录:"
我们需要 echo -n 取消换行符号
echo "请输入一个目录:";read 变量
请输入一个目录:etc
常用参数:
-p
read -p "请输入一个目录:" 变量
-t 定义超时时间
read -t 5 -p "请输入一个目录:" 变量
| |
输入是否正确 没有输入
| | | |
正确 不正确,给提示 提示必须输入 给出默认值
#!/bin/bash # Author: lzq # Blog: https://home.cnblogs.com/lzqitdl/ # Time: 2019-08-16 05:26:36 # Name: text.sh # Version: v1.0 # Description: This is a Script. read -t 5 -p "输入一个设备文件名:" devname [ -z $devname ] && fdisk -l && exit 1 if [ -b /dev/$devname ];then fdisk -l /dev/$devname exit 0 else echo "$devname 不是设备文件" echo "Usage:'请输入一个设备文件,如 sda'" fi ~
2、for语句循环 while until
2、文本判断脚本
#!/bin/bash
# Author: lzq
# Blog: https://home.cnblogs.com/lzqitdl/
# Time: 2019-08-16 05:26:36
# Name: text.sh
# Version: v1.0
# Description: This is a Script.
read -p "输入一个文件名:" name if [ -z $name ];then echo "Usage:'输入一个文件名:/etc/fstab'" exit 1 fi if [ ! -e $name ];then echo "提示:输入的文件不存在!!fool" exit 2 elif [ -f $name ];then echo "$name is a file" elif [ -d $name ];then echo "$name is a dir" elif [ -b $name ];then echo "$name is a block file" elif [ -L $name ];then echo "$name is a Link file" else echo "$name是其他文件类型" fi
for语句的应用场景:
有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】
a=['a','b','c'] -- 在Python程序中,我们很多情况下,需要调用相应的方法去生成列表;
for 变量 in 列表;do 循环体 done
#!/bin/bash # for i in `seq 9`;do for j in `seq 9`;do [ $j -le $i ] && echo -n -e "$i*$j=`echo $(($i*$j))` " done echo " " done
#方法2
for in {1..3};do
for j in (j=1;j<10;j++);do
#echo -n -e "$i*$j=$[$i*$j] "
[$j-le $i]&&echo -n -e "$i*$j=$[$i*$j] "
done
echo
done
补充:
-e : 使echo命令,能够识别 特殊字符;
回车不换行
换行符
制表符 tab = 4个空格
列表的生成方式:
1、直接给出字符串列表
for i in a b c d e ;do
循环体
done
2、整数列表
a {start ... end} // {1..1}是不行的 {1..9} == python range{1,100}
b seq 命令引用 $(seq [start [step]] end)
步长 python range{1,100,2}
seq 20 30
整数列表实例:写一个for循环--遍历本网络网段中所有up的电脑
#!/bin/bash # ping遍历 declare -i sum=0 for i in $(seq 1 100);do ping -c 1 -w 1 10.6.12.$i &> /dev/null if [ $? -eq 0 ];then let sum++ echo "10.6.12.$i 是通的" else echo "10.6.12.$i 是不通的" fi done echo "总共有 $sum 台电脑在线"
3、返回列表的命令
$(COMMAND)
应用场景: ls /var/log/
题目:判断 /var/log/ 的所有文件,以 .log 结尾的文件统计处理啊,并显示:
#!/bin/bash # declare -i sum=0 for i in $(ls /var/log/);do if [ "*.log" = $i ];then echo $i let sum++ fi done echo ".log结尾的文件有:$sum"
4、glob机制 -- 文件名通配符的机制
$(ls /var/log/)
/var/log/*
test命令总结:
1、test的命令的option的 -a -o 只在命令中使用;
例如 [ `du -h $filename | cut -d: -f1` -lt 100K -a -x $filename ]
test `du -h $filename | cut -d: -f1` -lt 100K -a -x $filename
注意:做字符串匹配的时候,不支持正则以及通配符
2、test test == [[ ]]
再连接两个test的命令的时候,不能使用命令内部option -o -a
一般使用 || && == != >= <=
[[ yum.log == *.log ]]
$@ $* 将参数做为for循环的列表
bash中$0代表运行的脚本文件、
awk中$0整行内容 --awk按行执行
基于C语言格式的for语句语法:
#常规用法
for 变量 in 列表; do 循环体 done
优点:不易进入死循环
#C语言用法
for((初始条件;条件判断语句;值变化语句));do 循环体 done
case语句的语法格式:
case 变量 in PATTEN1) 代码块1 ;; PATTEN2) 代码块2 ;; *) 代码库 esac
while
while语句格式
初始值
while 条件;do 循环体 let i++ //变化初始值 done