Linux系列-shell学习笔记(续一) 处理用户输入

1.运行带参数的程序

$0表示程序名,$1表示第一个参数,$2表示第二个参数,一次类推,直到第九个参数$9

# vi factorial

#!/bin/sh
f=1
for((i=1;i<=$1;i++))
do
        f=$[ $f * $i]
done
echo $f

测试:

[[email protected] test]# ./factorial 5
120

注意:如果有多个参数,每个参数必须有个空格,如果一个参数里面带空格,必须用单引号或双引号括起来。

2.读取程序名

编写基于所用的脚本名而执行不同功能的脚本

# vi addem

#!/bin/sh
name=`basename $0`
echo $name
if [ $name = "addem" ]
then
        echo $[$1+$2]
elif [ $name = "mulem" ]
then
        echo $[ $1 * $2]
fi

# cp addem mulem

测试:

[[email protected] test]# sh addem 3 4
7
[[email protected] test]# sh mulem 33 3
99

3.参数计数

可以通过 $# 来统计参数的个数。

可以通过 ${!#} 来获得最后一个命令行参数变量,或者是params=$#,然后用$params 获得也可以。

4.获得所有数据

$*和[email protected]变量提供了对所有参数的快速访问。

[[email protected] test]# vi test11
#!/bin/sh
# testing $* and [email protected]
echo "Using the \$* method:$*"
echo "Using the \[email protected] method:[email protected]"
测试:
[[email protected] test]# ./test11 rich jjds fds qaa dsdd
Using the $* method:rich jjds fds qaa dsdd
Using the [email protected] method:rich jjds fds qaa dsdd

$*:存储的数据相当于单个单词;

[email protected]:存储的数据相当于多个独立的单词。

5.shift移动变量

使用shift可以把参数都向前移动一位,$1会被移调,最后$#的大小会减掉1

使用shift 2 表示一次移动两位

判断带入的参数是否不为空:if [ -n $1 ] 表示判断$1是否为空

6.查找选项

# vi test12

#!/bin/sh
# extracting command line options as parameters
while [ -n "$1" ]
do
        case "$1" in
        -a) echo "-a option" ;;
        -b) echo "-b option" ;;
        -c) echo "-c option" ;;
        *) echo "$1 is not an option" ;;
        esac
        shift
done

测试:

[[email protected] test]# ./test12 -a
-a option
[[email protected] test]# ./test12 c
c is not an option
[[email protected] test]#

7.getopt命令和getopts命令

 

8.获得用户输入           

# vi test13

#!/bin/sh
echo "please enter you name:"
read name
echo "hello $name ,where come to here"
测试:
[[email protected] test]# ./test13
please enter you name:
haha
hello haha ,where come to here

可以在read后面直接跟指定提示符:

read –p "please entry you age:" age

还可以使用-t设置计时器

read –t 5 –p "please entry you age:" age

其它参数:

-s隐式方式读取,数据会被显示,只是read命令会将文本颜色设置成跟背景色一样;

9.从文件中读取数据

# vi test15

#!/bin/sh
count=1
cat test | while read line
do
        echo "Line $count: $line"
        count=$[$count + 1]
done
echo "finish file!"

测试

[[email protected] test]# ./test15
Line 1: #!/bin/sh
Line 2: if date
Line 3: then
Line 4: echo "it worked!"
Line 5: fi
Line 6: echo "this is a test file"
Line 7: echo "this is a test file"
finish file!

时间: 2024-10-28 11:24:58

Linux系列-shell学习笔记(续一) 处理用户输入的相关文章

Linux系列-shell学习笔记

第一记 1.  简单的helloworld编写 Shell输入下输入命令:vi helloworld.sh 随后进入文本编辑: #!/bin/shell #this is ahelloworld test a="helloworld" echo $a 执行helloworld.sh文件 命令: # sh helloworld.sh 2.变量赋值的方式是 # variable_name = variable_value 如果对一个已经有值的变量赋值,新值将取代旧值.取值的时候要在变量名前

linux的shell学习笔记

shell脚本第一行写明解释器的路径: #!/bin/bash运行脚本两种方式:使用bash命令运行shell文件,或授予脚本文件执行权限,可直接执行文件shell启动时,一开始执行一组命令来定义提问文本.颜色等设置,命令存放在~/.bashrc中登录shell放在~/.bash_profileshell历史记录文件~/.bash_historybash中每个命令或命令序列通过使用分号或换行符来分隔 echo用于终端打印printf 用于终端打印env 查看所有与终端相关的环境变量cat /pr

Linux Bash Shell学习笔记

参数扩展: 1.被名称引用的参数称作变量2.被数字引用的参数称作位置参数3.被特定符号引用的参数具有特殊的含义和用途,被称作Bash的特殊内部变量引用. 基本参数扩展:字符$会引导参数扩展.大括号是可选的,但是大括号可以保护待扩展的变量,使得紧跟大括号后面的内容不会被扩展.例: 1 $ PARAMETER 2 $ {PARAMETER} 3 #如果参数名后跟其他字符,大括号是必须的. 4 5 $ WORD=car 6 $ echo $WORDs 7 $ echo ${WORD}s 8 cars

python学习笔记(注释、用户输入、格式化输出)

注释 单行:# 多行:上下各用3个连续单引号或双引号 3个引号除了多行注释,还可以打印多行 举例: msg = ''' name = "Alex Li" name2 = name print ("My name is",name,name2) ''' # print(msg) 运行结果第二个print就是打印3行字符串. 如果单行,用引号即可:msg = "Alex Li" python中,单引号和双引号相同,除了单套双或双套单. 例: msg

Python 学习笔记【04】用户输入

用户输入 1 name = input("username:") 2 password = input("password:") 3 4 print(name, password) 其他示例1:字符串拼接 1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:&quo

Linux Shell 学习笔记

2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用. exit(0)表示正常退出执行程序,如果加其它的数值:1,2,....可以表示由于不同的错误原因而退出 . main函数中exit(0)等价于return 0. 1. Linux下一条命令或一个进程执行完成会返回一个一个状态码. 0 === 成功执行 非0 === 执行过程

Linux System Programming 学习笔记(五) 进程管理

1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity inside of a process the virtualization of memory is associated with the process, the threads all share the same memory address space 2. pid The idle pro

Linux System Programming 学习笔记(十) 信号

1. 信号是软中断,提供处理异步事件的机制 异步事件可以是来源于系统外部(例如用户输入Ctrl-C)也可以来源于系统内(例如除0) 内核使用以下三种方法之一来处理信号: (1) 忽略该信号.SIGKILL和SIGSTOP不能被忽略. (2) 捕捉并且处理该信号.The kernel will suspend execution of the process's current code path and jump to a previously registered function. SIGK

Linux System Programming 学习笔记(九) 内存管理

1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB 内存页分为 valid or invalid: A valid page is associated with an actual page of data,例如RAM或者磁盘上的文件 An invalid page is