一文教你入门shell脚本5.0——Shell常用命令简单说明(echo、read、exit、declare)

Shell常用命令

1、echo:输出字符串

1.1、定义和常用选项参数

在终端下打印变量value,其主要用于字符串的输出。echo可用作显示注释,用于一些批命令中需要注释给用户看的地方

 echo [Options] [String]

方括号中的项目是可选的。字符串可以定义为字符的有限序列(如字母,数字,符号,标点符号)。
当echo命令不带任何选项或字符串使用时,它会在显示屏上返回一个空白行。

Options选项表如下:

Options选项 功能描述
-e 启用反斜线转义。
-n 不要在最后自动换行,-e‘后面的带上‘/n’行会在遇到的地方作为新的一行
-E 禁用反斜线转义解释(默认)
/b 退格,‘-e‘后带上’/b’会删除字符间的所有空格
/t ‘-e‘后面跟上‘/t’会在空格间加上水平制表符
/v -e‘后面跟上‘/v’会加上垂直制表符
/a -e‘后面跟上‘/a’选项会听到声音警告
\c 转义字符,有了-e参数,我们也可以使用转义字符\c来强制 echo 命令不换行

1.2、常用操作

1.显示普通字符串
在最后默认加上换行符,如果不希望换行,可以加上-n参数

#!/bin/bash

name="KOBE"

status="ALLstar"
height=198
daughter="GIGI"

echo -n "${name} is a great ${status},"
echo -n "${height}cm in height "
echo "and his cute daughter is ${daughter}."
echo "RIP!"

在这里插入图片描述
2.显示转义字符
默认情况下,echo 不会解析以反斜杠\开头的转义字符。比如,\n表示换行,echo 默认会将它作为普通字符对待

echo "hello \nKOBE"#输出 hello \nKOBE

我们可以添加-e参数来让 echo 命令解析转义字符

echo -e "hello \nKOBE"

输出

hello
KOBE

有了-e参数,我们也可以使用转义字符\c强制 echo 命令不换行

[amy@bjcp0487 shell]$ vi test.sh 
#!/bin/bash

name="KOBE"

status="ALLstar"
height=198
daughter="GIGI"

echo -e "${name} is a great ${status},\c"
echo -e "${height}cm in height \c "
echo "and his cute daughter is ${daughter}."
echo "RIP!"

在这里插入图片描述
3.显示结果定向至文件

echo "hello KOBE" > myfile

4.显示命令执行结果

echo `date`   #结果将显示当前日期

这里使用的是`反引号 (Esc下面), 而不是单引号 '。

2、read:读取从键盘输入的数据

2.1、定义和常用选项参数

用来从标准输入中读取数据并赋值给变量:

  • 如果没有进行重定向,默认就是从键盘读取用户输入的数据;
  • 如果进行了重定向,那么可以从文件中读取数据。
read [-options] [variables]
  • options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。
  • optionsvariables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。
    在这里插入图片描述

2.2、常用操作

1、使用 read 命令给多个变量赋值

#!/bin/bash

read -p "Enter your favorite NBA star: > " name height daughter
echo "name: $name"
echo "height: $height"
echo "girl: $daughter"

必须在一行内输入所有的值,不能换行,否则只能给第一个变量赋值,后续变量都会赋值失败.
在这里插入图片描述
使用了-p选项,该选项会用一段文本来提示用户输入。
在这里插入图片描述
2、读取固定数目字符

#!/bin/bash

read -n 1 -p "Enter a char > " char
printf "\n"  #换行
echo $char

在这里插入图片描述
-n 1表示只读取一个字符。运行脚本后,只要用户输入一个字符,立即读取结束,不用等待用户按下回车键。
3、指定时间内输入字符

#!/bin/bash

if
    read -t 20 -sp "Enter password in 20 seconds(once) > " pass1 && printf "\n" &&  #第一次输入密码
    read -t 20 -sp "Enter password in 20 seconds(again)> " pass2 && printf "\n" &&  #第二次输入密码
    [ $pass1 == $pass2 ]  #判断两次输入的密码是否相等
then
    echo "Valid password"
else
    echo "Invalid password"
fi

这段代码中,我们使用&&组合了多个命令,这些命令会依次执行,并且从整体上作为 if 语句的判断条件,只要其中一个命令执行失败(退出状态为非 0 值),整个判断条件就失败了,后续的命令也就没有必要执行了。

如果两次输入密码相同,运行结果为:

Enter password in 20 seconds(once) >
Enter password in 20 seconds(again)>
Valid password

如果两次输入密码不同,运行结果为:

Enter password in 20 seconds(once) >
Enter password in 20 seconds(again)>
Invalid password

如果第一次输入超时,运行结果为:

Enter password in 20 seconds(once) > Invalid password

如果第二次输入超时,运行结果为:

Enter password in 20 seconds(once) >
Enter password in 20 seconds(again)> Invalid password

3、exit命令:退出当前进程(类似C++)

3.1、定义

  • 用来退出当前 Shell进程,并返回一个退出状态;使用$?可以接收这个退出状态
  • exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。
  • 一般情况下,退出状态为 0 表示成功,退出状态为非 0 表示执行失败(出错)了
    • exit 退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

3.2、常用操作

#!/bin/bash

echo "befor exit"
exit 8
echo "after exit"

在这里插入图片描述
可以看到,after exit并没有输出,这说明遇到 exit 命令后,test.sh 执行就结束了。 exit 表示退出当前 Shell 进程,我们必须在新进程中运行 test.sh,否则当前 Shell 会话(终端窗口)会被关闭,我们就无法看到输出结果了。

使用$?来获取 test.sh 的退出状态:
在这里插入图片描述

4、declare命令:设置变量属性

4.1、定义和参数列表说明

declare 是 Shell 内建命令,用来设置变量的属性。

declare [+/-] [aAfFgilprtux] [变量名=变量值]

其中,-表示设置属性,+表示取消属性,aAfFgilprtux(注意这里不是一个整体,是每一个字母都代表一种参数选项)都是具体的选项,它们的含义如下表所示:
在这里插入图片描述

4.2、常用操作

1、关联数组声明
具体使用参考此处。

关联数组使用字符串作为下标,而不是整数,可以使用任意的文本作为数组索引。

declare -A arr_name

关联数组必须使用带有-A选项的 declare 命令创建,arr_name为数组名

独立的”索引-值“进行赋值

arr_name[index1]=val1
arr_name[index2]=val2

实例

#!/bin/bash

declare -A Allstar
Allstar["KOBE"]="24"
Allstar["GIGI"]="2"
Allstar["Lebron"]="23"

#获取所有元素值
for value in ${Allstar[*]}
do
    echo $value
done
echo "****************"
#获取所有元素下标(键)
for key in ${!Allstar[*]}
do

    echo $key
done
echo "****************"
#列出所有键值对
for key in ${!Allstar[@]}
do
    echo "${key} -> ${Allstar[$key]}"
done

在这里插入图片描述
2、将变量声明为整数,然后计算

#!/bin/bash

declare -i m n ret  #将m n ret声明为整数
m=10
n=30
ret=$m+$n
echo $ret

输出:40

3、将变量定义为只读变量

[jmw]$ declare -r n=10
[jmw]$ n=20
bash: n: 只读变量
[jmw]$ echo $n
10

4、显示变量的属性和值

[jmw]$ declare -r n=10
[jmw]$ declare -p n
declare -r n="10"

参考

1、https://blog.csdn.net/oqqSSH/article/details/78614002
2、http://c.biancheng.net/view/2991.html

猜你喜欢

转载自blog.csdn.net/JMW1407/article/details/107462883