本文共 3799 字,大约阅读时间需要 12 分钟。
一、bash交互式编程 脚本参数: 用户交互://linux的重要思想,尽量避免和用户交互 1.脚本传递参数, a.sh tom jery 2.通过键盘获取数据 read // -p 'promtpt' //提示符 // read a b 输入tom和jerry会分别识别为a和b -t timeout 超时时间 read a b //输入 ja tom wolf //a==ja ,b='tom wolf' read -t 5 -p "enter a name: " name 脚本:添加用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root @mt test] # cat adduser.sh #!/bin/bash # read -p "Enter a username : " name [ -z $name ] && echo "username is needed ..." && exit 2 read -p "Enter a password for $name " passwd [ -z $passwd ] && password= "password" if id $name &> /dev/null ;then echo "$name is exists." else useradd $name echo "$password" | passwd --stdin $name &> /dev/null echo "useradd succeed.." fi |
3.bash -n a.sh //语法错误,不能报告逻辑错误
bash -x a.sh //调试执行 二、bash选择执行(if) 过程式编程语言的执行流程: 选择执行 顺序执行 循环执行 选择执行: && ,|| if语句 case 语句 if语句:三种格式 单分支的if语句 if CONDITION;then if-true 分支; fi 双分支的if语句 if CONDITION ;then if-true分支 else if-false 分支 fi 多分支的if语句 if CONDITION1;then 条件1 为真分支 elif CONDITION2;then 条件2;为真分支 elif CONDITION3;then 条件3;为真分支 ... else 所有条件都不满足时的分支 注意:分支只会执行一个,首先测试为真; 多个条件同时都能满足,只执行第一个匹配到的 脚本1-3位if语句 三、循环执行 //将一段代码重复执行0,1多次 进入条件:满足条件才进入循环 退出条件:每个循环都有退出条件, bash脚本: for循环 while循环 until循环 for循环 两种格式: (1)遍历列表 (2)控制变量 遍历列表: for VARIABLE in LIST; do 循环体 done 进入条件:只要列表有元素,即可进入循环 退出条件:列表中的元素遍历完成 LIST的生成方式 (1)直接给出 (2)整数列表 {start..end} / echo {20..30} seq 10 //1-10 seq 5 10 //从5到10 seq 1 2 10 //步数为2,只输出奇数列表 (3)cat/ls /var :返回列表的命令 cat /etc/issue (4) ls -d /etc/p* for i in /etc/p* 就可以 (5) 变量引用 $@,$# 等 脚本1:脚本传递一个文件名,判断文件类型是什么 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/bin/bash # if [ $ # -lt 1 ] ;then echo "At lease one path.." exit 1 fi if ! [ -e $1 ] ;then //假如不存在 echo "No suck file.." exit 2 fi if [ -f $1 ] ;then echo "Common file.." elif [ -d $1 ] ; then echo "Directory.." elif [ -L $1 ] ; then echo "Symbolic file..." elif [ -b $1 ] ;then echo "block file..." elif [ -c $1 ] ; then echo "Character file..." elif [ -S $1 ]; then echo "Socket file..." else echo "Unknown ... " fi |
脚本2:传递一个参数给脚本,此参数为用户名 根据其id号判断其用于类型 0:root 1-999:系统用户 1000+:登录用户
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash # [ $ # -lt 1 ] && echo "At least one user name." && exit 1 ! id -u $1 &> /dev/null && echo "no suck user" && exit 2 userid=$(id -u $1 ) if [ $userid -eq 0 ] ;then echo "root" elif [ $userid -ge 1000 ] ;then echo "logging user." else echo "System user." fi |
脚本3:列出如下菜单为用户
disk)show disks info mem)show memory info; cpu)show cpu info cat /proc/meminfo或者lscpu *) quit 提示用户给出自己的选择,而后显示对应其选择的相应系统信息 1 2 3 4 5 6 7 8 | #!/bin/bash # cat 《《 EOF disk) show disks info mem) show memory info; cpu) show cpu info *) quit EOF |
1 2 3 4 5 6 7 8 9 10 11 | read -p "Your choice: " opt if [ "$opt" == 'disk' ] ;then fdisk -l /dev/sd[a-z] elif [ "$opt" == 'mem' ] ;then free -h elif [ "$opt" == 'cpu' ] ;then lscpu else echo "Unknown option.." exit 3 fi |
脚本4:添加用户 #!/bin/bash # for i in user20 user21 user22 ;do if id $i &> /dev/null ; then echo "$i exists.." else useradd $i && echo "Add user $i succeed" fi done 脚本5:从1-100的和
1 2 3 4 5 6 7 8 | #!/bin/bash # declare -i sum=0 for i in {1..100}; do sum=$[ $sum + $i ] echo "\$sum is $sum" // 可以对$进行转义 done echo $sum |
脚本6:判断/var/log下所有文件的类型 方法1:file /var/log/* 方法2:脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash # for filename in / var / log / * ; do echo - n "$filename " if [ - f $filename ] ;then echo "Common file.." elif [ - d $filename ] ; then echo "Directory.." elif [ - L $filename ] ; then echo "Symbolic file..." elif [ - b $filename ] ;then echo "block file..." elif [ - c $filename ] ; then echo "Character file..." elif [ - S $filename ]; then echo "Socket file..." else echo "Unknown ... " fi done |
脚本7:练习
1.分别求100以内所有偶数之和,以及奇数之和 2.计算当前系统上的所有用户的id之和 3.通过脚本参数传递一个目录给脚本,而后计算此目录下所有文件文件的行数,并说明此类文件的总数
本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1950192,如需转载请自行联系原作者