Shell常用命令简单说明

  • Shell常用命令
  • 1、echo:输出字符串
  • 1.1、定义和常用选项参数
  • 1.2、常用操作
  • 2、read:读取从键盘输入的数据
  • 2.1、定义和常用选项参数
  • 2.2、常用操作
  • 3、exit命令:退出当前进程(类似C++)
  • 3.1、定义
  • 3.2、常用操作
  • 4、declare命令:设置变量属性
  • 4.1、定义和参数列表说明
  • 4.2、常用操作
  • 参考


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!"

shell echo路径的下一层 shell中echo_shell


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!"

shell echo路径的下一层 shell中echo_read_02


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"

必须在一行内输入所有的值,不能换行,否则只能给第一个变量赋值,后续变量都会赋值失败.

shell echo路径的下一层 shell中echo_exit_03


使用了-p选项,该选项会用一段文本来提示用户输入。

shell echo路径的下一层 shell中echo_read_04


2、读取固定数目字符

#!/bin/bash

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

shell echo路径的下一层 shell中echo_echo_05


-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"

shell echo路径的下一层 shell中echo_shell echo路径的下一层_06


可以看到,after exit并没有输出,这说明遇到 exit 命令后,test.sh 执行就结束了。 exit 表示退出当前 Shell 进程,我们必须在新进程中运行 test.sh,否则当前 Shell 会话(终端窗口)会被关闭,我们就无法看到输出结果了。使用$?来获取 test.sh 的退出状态:

shell echo路径的下一层 shell中echo_echo_07

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

4.1、定义和参数列表说明

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

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

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

shell echo路径的下一层 shell中echo_exit_08

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

shell echo路径的下一层 shell中echo_shell_09


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"

参考


2、http://c.biancheng.net/view/2991.html