Shell常用命令简单说明
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
表示用来存储数据的变量,可以有一个,也可以有多个。options
和variables
都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量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、常用操作
关联数组使用字符串作为下标,而不是整数,可以使用任意的文本作为数组索引。
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