shell学习之select循环

学习循环,见了很多的for,while,或者until,而select用的比较少,这里是稍微总结下select这个循环。

基本结构:

select  VALUE  in  LIST

do

COMMAND

done

而现实出来的结构大概为值前有个数字,选择的那个数字,是$REPLY的值,这里不懂没事,可以继续看下面的程序。$PS3变量相当于shell的默认提示符,默认为空,可以配合select使用。

#!/bin/bash
#save  $PS3
oPS3=$PS3
PS3="请选择喜欢的水果q退出:"

select fruit in pear apple banana  others  quit
do
        if [ ! -z "$fruit" ] ; then
                [ "$fruit" == "quit" ] && exit 0 || echo "you choosed $REPLY and you like $fruit"
        else    
                        echo "wrong argv $REPLY"
        fi
done
#restore $PS3
PS3=$oPS3

执行结果

[[email protected] shell]# ./select.sh 
1) pear
2) apple
3) banana
4) others
5) quit
请选择喜欢的水果q退出:1
you choosed 1 and you like pear
请选择喜欢的水果q退出:6
wrong argv 6
请选择喜欢的水果q退出:5

再写个程序,顺便说一下常用的字符串到数字运算,自己写的,有点蹩脚,这个程序要注意有的地方不能有空格比如let,而expr则必须有空格,为了保险,我使用了单引号

#!/bin/bash
#save PS3
oPS3=$PS3
PS3="choose the way:"

function way1 (){
echo "you are using () to add"
tmp1=$((nu1 + nu2))
echo "value is $tmp1"
}
function way2(){
echo "you are using expr to add"
echo "value is `expr ${nu1} + ${nu2}`"
}
function way3(){
echo "you are using let to add"
let tmp2=${nu1}+${nu2}
echo "value is $tmp2"

}

read -p "please input two to test:" nu1 nu2
select cal in ‘(())‘ ‘expr‘ ‘let‘ ‘q‘
do
        case $cal in
        ‘(())‘)
                way1;;
        ‘expr‘)
                way2;;
        ‘let‘)
                way3;;
        ‘q‘)
                exit 0;;
        * )
                echo "wrong argv";;
        esac
done

#restore PS3
PS3=$oPS3

执行结果为

[[email protected] shell]# ./select2.sh 
please input two to test:2 3
1) (())
2) expr
3) let
4) q
choose the way:3
you are using let to add
value is 5
choose the way:1
you are using () to add
value is 5
choose the way:2
you are using expr to add
value is 5
choose the way:4

和本次无关

突然想写这样一个脚本

对每一个非系统用户说声hello,用户名,i know you are form 用户组名

我的思路就是shell不能是/sbin/nologin,家目录不能为/sbin我的文件时这样子的

好吧,我承认这个更蹩脚,改天看下详细的awk命令

#!/bin/bash
#change ps2
tmp=`cat /etc/passwd`

cat /etc/passwd 2>/dev/null|grep -v /sbin/nologin|grep -v /sbin|awk -F ":" ‘{print "hello,"$1",i know you are from "$5"."}‘

执行结果为:

[[email protected] shell]# ./while.sh 
hello,root,i know you are from root.
hello,liuliancao,i know you are from liuliancao.

改天学了awk再修改下吧

这里有个书上写的关于变量书写的tips:

简写如下

a)常数,字符串,文件名建议大写

b)数字等数据变量建议小写

c)命名本质没有好坏之分,重要的是始终保持一种风格,好像这点我得继续努力...

时间: 2024-10-22 12:52:34

shell学习之select循环的相关文章

shell学习之for循环语句【初学者】

前言:日常系统管理工作中有大量需要重复运行的指令,shell编程提供了for.while.until.select循环语句以实现特定指令的反复执行功能,在所有的循环语句中,变量必须要有初始值,每次运行命令序列前都需要对条件进行过滤,满足条件才会运行命令,否则不执行相关操作.下面介绍的就是for循环语句的两种语法格式. for 循环每次处理依次列表内信息,直至循环耗尽.相对于while.until的循环方式是必须符合某个条件的状态,for这种语法是已经知道要进行几次循环的状态. 语法格式1: fo

shell中的select循环使用

select单独使用 cat select01.sh  #!/bin/bash echo "Which car do you prefer?" select CAR in Benz Audi VolksWagen do         break done echo "You chose $CAR" 运行结果 sh select01.sh  Which car do you prefer? 1) Benz 2) Audi 3) VolksWagen #? 1 You

第八章 shell学习之循环和结构化命令

for循环 1. 列表for循环 for variable in {list}  #有些像C++/CLR中的for each do ... done 如: 1. [[email protected] tmp]# cat b.sh #! /bin/bash for i in 1 2 3 4 5      #1 2 3 4 5等价于{1..5} do echo $i done [[email protected] tmp]# ./b.sh 1 2 3 4 5 2. [[email protected

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

tar  tar -cf 路径+文件名字后续.tar  +路径 创建归档压缩 tar cf /testdir/etc.tar /etc/ tar cvf 可以查看解压过程 tar tvf 预览作用 tar xvf 解压文件 tar zcvf /testdir/etc2.tar.gz /etc/ 解压再压缩到指定路径,文件格式 tar jcvf cpio 复制 从或到文件 cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以".cpio"或者".ta

shell学习笔记之七(循环)

循环 shell中的循环主要有for,while,untile,select for 1.列表for循环 for VARIABLE in (list) do command done 例:循环打印john喜欢的水果 for fruit in apple orange banana pear do echo "$fruit is John's favorite" done echo "No more fruits." 注意: in里面可以是任意命令的标准输出 如: f

Shell脚本循环语句——select循环

select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准输出上,并显示 PS3示符,等待用户输入用户输入菜单列表中的某个数字,执行相应的命令, 用户输入被保存在内置变量 REPLY 中 select经常和case联合使用与for循环类似,可以省略 in list,此时使用位置变量 select是个无限循环,要想退出必须手动指定退出条件,一般会case中指定退出条件 语法格式: select variable in list  do  循环体命令 done select循环应用实例:

shell脚本进阶之循环判断

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 14.0pt; font-family: 等线 } h1 { margin-top: 15.6pt; margin-right: 0cm; margin-left: 0cm; margin-bottom: .0001pt; text-align: justify; line-he

shell学习日志

0.shell的变量同环境变量不同,存在用户环境区. 变量赋值的方式是: variable_name = variable_value a= "hello" $a对a进行取值 关于变量,还需要知道几个与其相关的Linux命令. 首个字符必须为字母(a-z,A-Z). 中间不能有空格,可以使用下划线(_). 不能使用标点符号. env用于显示用户环境区中的变量及其取值: set用于显示本地数据区和用户环境区中的变量及其取值: unset用于删除指定变量当前的取值,该值将被指定为NULL:

第四章 shell学习之sed命令和awk编程

sed命令 sed只是对缓冲区中原始文件的副本进行编辑,不改变源文件,所以要保存则要重定向到另一个文件 sed三种方式: 1.sed [选项] 'sed命令' 输入文件 2.sed [选项] -f sed脚本文件 输入文件 3../sed脚本文件 输入文件 其中3的sed脚本文件要以#! bin/sed -f等开头 选项: -n 不打印所有行到标准输出,默认先打印匹配的再打印所有 -e 关联多个sed命令 -f 调用sed脚本文件 定位文本: x x为指定行号 x,y 从x到y行 /patter