bash学习记录(十)命令篇(1)

Bash中的命令

内建命令

内建命令是bash工具集中自带的命令,好处是执行速度比外部命令要快,因为内建命令一般直接执行命令,而外部命令一般要分支出一个子进程。

I/O操作

  • echo 当然是最熟悉的echo命令进行输出了。但是需要注意的是在使用 echo `command ` 的时候echo会默认将取消输出的所有换行。

再当使用 echo “`command`“的时候可以避免换行符的缺失。

1
2
3
4
5
echo "`ll`"
total 12K
drwxr-xr-x 2 nanyin nanyin 4.0K Jun 19 21:18 bash
drwxr-xr-x 3 nanyin nanyin 4.0K Jun 18 21:16 git
-rw-r--r-- 1 nanyin nanyin 1.1K Jun 19 21:31 总结.txt
  • printf 在C中使用的printf 能够格式化输出内容。
1
2
3
4
5
# 基本使用
printf format-string... parameter...
# 例子
declare -r PI=3.1415926535
printf "pi to 2 decimal is %1.2f" $PI # pi to 2 decimal is 3.14%
  • read 读取参数的命令,可以通过这个命令读取输入参数。通常情况下,在输入read数据期间输入\会抑制换行符。 -r选项会导致输入的\被字面解释。同样read命令有很多参数可以使用
1
2
3
echo "please input a value:"
read var1
echo "input var1 is $var1"

当read 后面不跟任何值的话他默认给 $REPLY 赋值,之后可以取这个值作为read进来的值。

在当输入内容后面加上 / 的话会起到输入时候的换行的作用,而使用 -r 参数会将 /按照原样输出出来

1
2
3
4
5
6
echo "input var1 is $var1"
echo "Enter a string terminated by a \\, then press <ENTER>."
echo "Then, enter a second string (no \\ this time), and again press <ENTER>."
read
echo "the default value is $REPLY"
# 当read后面不写具体值的时候会把值付给 REPLY

read有很多有用的参数可以调用,实现复杂的输入功能。

1
2
3
4
5
read -s -n1 -p "Hit a key " keypress
# read 有很多非常有意思的参数,比如 -s的意思就是不要回显输入
# -n1 的意思是输入指定数量的字符
# -p 是先输出前面的提示。
echo; echo "Keypress was "\"$keypress\""."

read也可以使用文件作为输入的源

1
2
3
4
5
6
7
8
9
10
11
12
13
echo "文件temp_file中内容有两行 一行是hello world 第二行是 Hello World"
read var1 var2 < temp_file
echo "var1 is $var1 var2 is $var2"
echo "这里显然输出的第一行的内容"
echo "---------------------------"
echo "其实还能自定义IFS分割符然后根据规则自定义文件输入"
echo "all users in the list:"
OIFS=$IFS ; IFS=:
while read name passwd uid gid fullname ignore
do
echo "$name ($fullname)"
done < /etc/passwd
IFS=$OIFS

文件系统操作

操作文件系统的命令有很多但是都非常的常用也非常的简单。这里不做具体的说明其中举一两个非常常见的。

cd : 切换目录

pwd : 查看当前工作目录

变量操作

let 是能够进行简单变量运算的命令 比如

1
2
3
4
let a=1+2
echo $a
let b="2+3"
echo $b

eval 命令是能够将字符串转换成成命令。并且可以多次调用以去评估是否是命令去执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

command_string="ps ax"
process="ps ax"
eval "$command_string" | grep "$process"
# 26973 pts/3 R+ 0:00 grep --color ps ax
# 26974 pts/3 R+ 0:00 ps ax

a='$b'
b='$c'
c=d
echo $a # $b
# First level.
eval echo $a # $c
# Second level.
eval eval echo $a # d
# Third level.

set和unset命令,一看就知道是设置和取消变量的意思。

export 命令一般使用在设置环境变量上,如在/etc/profile文件中设置JAVA_HOME

declare和typeset命令指定和/或限制变量的属性。

getopts 是能够定义属性的 比如 在解压tar包的时候使用-xvf
之类的命令的时候就是使用getopts来达到不同的 -a -b 之类的实现。这个命令一般出现在case 或者while循环中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while getopts ":abcde:fg" Option
# Initial declaration.
# a, b, c, d, e, f, and g are the options (flags) expected.
# The : after option 'e' shows it will have an argument passed with it.
# e参数后面的的表示会有参数传递给他
do
case $Option in
a ) # Do something with variable 'a'.
b ) # Do something with variable 'b'.
...
e) # Do something with 'e', and also with $OPTARG,
# which is the associated argument passed with option 'e'.
...
g ) # Do something with variable 'g'.
esac
done
shift $(($OPTIND - 1))
# Move argument pointer to next.
-------------本文结束感谢您的阅读-------------

本文标题:bash学习记录(十)命令篇(1)

文章作者:NanYin

发布时间:2018年06月19日 - 15:06

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2018/06/19/2018-06-19-bash_09-bash%E5%91%BD%E4%BB%A4%E7%AF%87%EF%BC%88%E4%B8%80%EF%BC%89/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。