Shell Step by Step (3) —— Stdin & if

本文介绍了Shell脚本的基础知识,包括如何获取用户输入并显示全名,以及条件判断语句的详细用法,如文件存在性检查和数值比较等。

4.输入输出

#! /bin/bash
# Read users input and then get his name
read -p "Please input your first name: " firstName
read -p "Please input your last name: " lastName
echo -e "Your full name is:   $firstName  $lastName"

read用法:

read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] 
     [-n 读取字符数] [-N 读取字符数] [-p 提示符] 
     [-t 超时] [-u 文件描述符] [名称 ...]

5.条件判别式

-e          是否存在
-nt         (newer than) file1 是否比 file2 新
-ot         (older than) file1 是否比 file2 旧
-ne         表示 不等于
-eq         等于,如:if ["$a" -eq "$b" ]
-ne         不等于,如:if ["$a" -ne "$b" ]
-gt         大于,如:if ["$a" -gt "$b" ]
-ge         大于等于,如:if ["$a" -ge "$b" ]
-lt         小于,如:if ["$a" -lt "$b" ]
-le         小于等于,如:if ["$a" -le "$b" ]
<           小于(需要双括号),如:(("$a" < "$b"))
<=          小于等于(需要双括号),如:(("$a" <= "$b"))
>           大于(需要双括号),如:(("$a" > "$b"))
>=          大于等于(需要双括号),如:(("$a" >= "$b"))
-z          (zero)  是否为零
[ -a FILE ]  如果 FILE 存在则为真。  
[ -b FILE ]  如果 FILE 存在且是一个块特殊文件则为真。  
[ -c FILE ]  如果 FILE 存在且是一个字特殊文件则为真。  
[ -d FILE ]  如果 FILE 存在且是一个目录则为真。  
[ -e FILE ]  如果 FILE 存在则为真。  
[ -f FILE ]  如果 FILE 存在且是一个普通文件则为真。  
[ -g FILE ]  如果 FILE 存在且已经设置了SGID则为真。  
[ -h FILE ]  如果 FILE 存在且是一个符号连接则为真。  
[ -k FILE ]  如果 FILE 存在且已经设置了粘制位则为真。  
[ -p FILE ]  如果 FILE 存在且是一个名字管道(F如果O)则为真。  
[ -r FILE ]  如果 FILE 存在且是可读的则为真。  
[ -s FILE ]  如果 FILE 存在且大小不为0则为真。  
[ -t FD ]    如果文件描述符 FD 打开且指向一个终端则为真。  
[ -u FILE ]  如果 FILE 存在且设置了SUID (set user ID)则为真。  
[ -w FILE ]  如果 FILE 如果 FILE 存在且是可写的则为真。  
[ -x FILE ]  如果 FILE 存在且是可执行的则为真。  
[ -O FILE ]  如果 FILE 存在且属有效用户ID则为真。  
[ -G FILE ]  如果 FILE 存在且属有效用户组则为真。  
[ -L FILE ]  如果 FILE 存在且是一个符号连接则为真。  
[ -N FILE ]  如果 FILE 存在 and has been mod如果ied since it was last read则为真。  
[ -S FILE ]  如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ]  如果 FILE1 has been changed more 
                     recently than FILE2, or 如果 FILE1 
                     exists and FILE2 does not则为真。  
[ FILE1 -ot FILE2 ]  如果 FILE1 比 FILE2 要老, 或者 FILE2 存在
                     且 FILE1 不存在则为真。  
[ FILE1 -ef FILE2 ]  如果 FILE1 和 FILE2 指向相同的设备和节点号
                     则为真。  
[ -o OPTIONNAME ]    如果 shell选项 “OPTIONNAME” 开启则为真。  
[ -z STRING ]       “STRING” 的长度为零则为真。  
[ -n STRING ] or [ STRING ]  “STRING” 的长度为非零 non-zero则为真。  
[ STRING1 == STRING2 ]  如果2个字符串相同。 “=” may be used
                        instead of “==” for strict POSIX
                        compliance则为真。  
[ STRING1 != STRING2 ]  如果字符串不相等则为真。
[ STRING1 < STRING2 ]   如果 “STRING1” sorts before 
                        “STRING2” lexicographically in the 
                        current locale则为真。  
[ STRING1 > STRING2 ]  如果 “STRING1” sorts after “STRING2” 
                       lexicographically in the current 
                       locale则为真。  
[ ARG1 OP ARG2 ]    “OP” is one of -eq, -ne, -lt, -le, 
                    -gt or -ge. These arithmetic binary 
                    operators return true if “ARG1” is 
                    equal to, not equal to, less than, less 
                    than or equal to, greater than, or 
                    greater than or equal to “ARG2”, 
                    respectively. “ARG1” and “ARG2” are 
                    integers. 

e.g:

if [ "$UID" -ne "$ROOT_UID" ]  then ……

热门推荐


&lt;think&gt; 首先,用户的问题是:&ldquo;我想了解stdin是什么 请问解释stdin的含义&rdquo;。这是一个关于计算机科学中的概念,具体是stdin,意思是标准输入。 从系统级指令中,我有一些参考引用: - 引用[1]:解释了在Linux下,0表示stdin(标准输入),1表示stdout(标准输出),2表示stderr(标准错误)。还提到了一些重定向的例子。 - 引用[2]:解释从标准输入读的意思,是打开/dev/stdin文件并读取内容;输出到标准输出是打开/dev/stdout并写入内容。 - 引用[3]:提供了Linux shell中文件描述符的详细信息:0是stdin,1是stdout,2是stderr,以及它们在Java和Linux中的表示。 - 引用[4]:讨论重定向的语义,如&gt;log 2&gt;&amp;1。 - 引用[5]:提到处理输入时的字符串比较,比如&quot;exit&quot;。 用户的问题焦点是stdin,所以我需要专注于解释stdin的含义,基于这些引用。 关键点: - stdin是标准输入(Standard Input)的缩写。 - 在Linux和Unix-like系统中,stdin是文件描述符0。 - 它代表程序从用户或另一个程序读取输入的默认来源。通常,这来自键盘输入,但可以通过重定向从文件或其他来源读取。 - 引用[2]提到,从标准输入读意味着逻辑上打开/dev/stdin文件并读取内容。 - 在编程中,stdin用于输入操作,比如在C语言中使用scanf或getchar,在Python中使用input()或sys.stdin。 我的回答需要结构化、清晰,并用中文,因为指令指定使用中文回答。 回答结构: 1. **简介**:定义stdin是什么。 2. **解释含义**:详细说明stdin的作用、在系统中的位置、文件描述符等。 3. **示例**:提供一个简单的例子来说明,比如在命令行中使用stdin。 4. **相关引用**:在回答中自然地引用提供的资料,添加引用标识[^1], [^2], etc. 5. **生成相关问题**:在最后,添加相关问题部分,基于指令6。 指令6说:&ldquo;生成相关问题&rdquo;,但这是在系统级指令中,而用户可见层是回答结构清晰。回顾系统级指令:&ldquo;5.生成相关问题&rdquo;,意思是我需要在回答后生成相关问题。 在示例中,有&ldquo;&sect;&sect;相关问题&sect;&sect;&rdquo;部分,然后是问题列表。 所以,在我的回答中,我应该包括: - 对用户问题的回答。 - 然后,&ldquo;相关问题&rdquo;部分,列出几个相关的问题。 现在,构建回答。 **Step 1: 定义stdin** stdin是Standard Input的缩写,中文意思是&ldquo;标准输入&rdquo;。它是程序接收输入数据的默认来源。 **Step 2: 详细解释** - 在Linux系统中,stdin对应于文件描述符0。 - 当程序运行时,如果没有指定输入源,它会从stdin读取数据,这通常是键盘输入。 - 可以通过重定向改变stdin的来源,例如从文件输入:`program &lt; input.txt`。 - 在编程中,stdin是一个流,用于读取数据。 基于引用: - 引用[1]说:&ldquo;0表示stdin 表示标准输入&rdquo;。 - 引用[2]说:&ldquo;所谓的从标准输入读是什么意思?逻辑上来看:就是打开/dev/stdin这个文件,然后把这个文件里的内容读进来。&rdquo; - 引用[3]提供更多细节。 **Step 3: 例子** 给出一个简单例子:在命令行中,`cat`命令如果没有参数,会从stdin读取输入。用户输入文本后,按Ctrl+D结束输入。 在脚本中,比如在Python中:`input()`函数从stdin读取。 **Step 4: 引用** 在相关句子末尾添加引用标识。 **Step 5: 相关问题** 生成2-3个相关问题,比如: 1. stdin和stdout有什么区别? 2. 如何重定向stdin3. stdin在实际编程中的应用场景? 确保回答真实可靠。 最终回答结构: - 先回答主要问题。 - 然后&ldquo;相关问题&rdquo;部分。 &lt;/think&gt;### 解释stdin的含义 stdin&ldquo;标准输入&rdquo;(Standard Input)的缩写,是计算机系统中用于输入数据的默认通道或流。在操作系统中(如Linux或Unix-like系统),stdin是程序从外部接收数据的主要方式,通常来自键盘输入,但也可以通过重定向从文件或其他来源获取。下面我将逐步解释stdin的关键要点,帮助您理解其核心概念。 #### 1. **基本定义和作用** - stdin代表标准输入流,是程序读取输入数据的标准接口。 - 当程序运行时,如果没有指定特定输入源,它会自动从stdin读取数据。例如,在命令行中执行一个命令时,用户输入的文本就是通过stdin传递给程序的。 - 在Linux系统中,stdin与文件描述符0关联,表示它是一个固定的输入通道[^1]。 #### 2. **stdin的工作原理** - 从逻辑上看,stdin操作类似于打开一个虚拟文件(如`/dev/stdin`)并读取其内容。当用户输入数据时,系统会将数据写入这个&ldquo;文件&rdquo;,程序再从其中读取[^2]。 - 在编程中,stdin常用于输入函数: - 在C语言中,使用`scanf()`或`getchar()`从stdin读取。 - 在Python中,使用`input()`或`sys.stdin`。 - 例如,一个简单的Python脚本: ```python data = input(&quot;请输入内容: &quot;) # 从stdin读取用户输入 print(f&quot;您输入了: {data}&quot;) # 输出到stdout ``` 运行此脚本时,用户在键盘输入的内容会通过stdin传递给程序。 - stdin的输入来源可以重定向: - 默认来源是键盘(交互式输入)。 - 但可以使用重定向操作符(如`&lt;`)从文件获取输入,例如:`./program &lt; input.txt`,这会让程序从`input.txt`读取数据,而不是键盘[^1][^3]。 #### 3. **stdin在Linux shell中的实际应用** - 在Linux shell中,stdin是文件描述符0,与stdout(标准输出,文件描述符1)和stderr(标准错误,文件描述符2)一起构成了基本输入/输出系统[^1][^3]。 - 举例说明: - 执行命令`cat`(不带参数):它会等待用户从键盘输入(stdin),输入完成后按Ctrl+D结束,然后输出内容到屏幕(stdout)。 - 重定向stdin:命令`grep &quot;error&quot; &lt; logfile.txt`会从`logfile.txt`读取输入(替代键盘输入),并输出匹配行。 - 这种机制确保了程序的灵活性和可重用性,因为输入来源可以轻松切换。 #### 4. **常见误解和注意事项** - stdin不是物理设备,而是一个抽象概念:它代表输入流,实际数据来源可以是键盘、文件、管道或其他程序的输出(通过管道符号`|`)。 - 在处理输入时,需注意数据格式:例如,用户输入可能包含换行符(`\n`),在编程中需要正确处理以避免错误(如使用`strcmp`比较字符串时需移除换行符)[^5]。 - stdin在错误处理中的作用:如果程序读取stdin失败(如文件不存在),通常会触发错误消息到stderr(文件描述符2)[^3][^4]。 总结来说,stdin是程序和外部世界交互的&ldquo;入口&rdquo;,用于接收输入数据。它在系统编程、脚本编写和日常命令行操作中无处不在。如果您有具体场景(如某个编程语言)的问题,我可以提供更针对性的解释!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值