linux shell 基础语法A-1

巧了我就是萌 提交于 2020-01-10 18:40:42

从echo开始
echo可以看做print printf之类的东西。几乎所有的shell脚本都离不开echo。
echo有如下几个作用:
(1)输出脚本执行流程的提示信息
(2)交互式脚本打印提示信息
(3)构建格式化的日志
(4)调试脚本时,可以用来打印出一些中间变量的值(当然也可以用bash +x调试执行脚本)

常用的option
-n:不换行打印
-e:识别转移字符(如\t)
许多脚本的usage就是echo来实现的(cmd -h or cmd --help)。

变量
变量分类:一般在shell中分为环境变量,用户变量,位置变量等的特殊变量三大类。shell是一种弱类型语言(强类型语言c,变量定义后要强制变换才能使用另一种变量类型,而shell不关心,变量的类型依据使用环境自己变化)。
但我们还是可以把shell中使用变量分为几个场景:
(1)字符串
root@ubuntu-jpk:~# echo "hello world"
hello world
(2)数值
root@ubuntu-jpk:~# a=1
root@ubuntu-jpk:~# b=2
root@ubuntu-jpk:~# c=$((a+b))
root@ubuntu-jpk:~# echo $c
3
(3)一维数组(列表)
root@ubuntu-jpk:~# list=(China America Japan)
root@ubuntu-jpk:~# echo ${list[0]}
China
root@ubuntu-jpk:~# echo ${list[1]}
America
(4)字典
实例 统计词频
#!/bin/bash
declare -A dict

while read word
do
if [ ! -n dict[${word}] ]
then
dict[${word}]=1
else
let dict[${word}]++
fi
done
echo -e "word\tcount"
for key in echo ${!dict[*]}
do
echo -e "$key\t${dict[$key]}"
done

root@ubuntu-jpk:/mnt/linux-shell-code/chapter2# cat testnum
a
b
b
b
c
c
jpk
jpk
a
root@ubuntu-jpk:/mnt/linux-shell-code/chapter2# cat testnum | bash dic.sh
word count
jpk 2
a 2
b 3
c 2

重定向
输出重定向> >>
输入重定向<
重定向多用于打印日志,和调整输出。重定向输出往往和文件描述符结合使用
常见的文件描述符有stdin0 stdout1 stderr2
(1)不想打印出错误信息
root@ubuntu-jpk:/# asdas
asdas: command not found
root@ubuntu-jpk:/# asdasd 2>/dev/null
(2)执行输出都打印到一个文件,包括错误
root@ubuntu-jpk:/mnt# asd >> testlog 2>&1
root@ubuntu-jpk:/mnt# date >> testlog 2>&1
root@ubuntu-jpk:/mnt# cat testlog
No command 'asd' found, but there are 22 similar ones
asd: command not found
Thu Aug 29 20:50:27 CST 2019
(3)执行输出打印到一个文件,错误打印到另外一个文件
root@ubuntu-jpk:/mnt# date 1>>rightlog 2>>errorlog
root@ubuntu-jpk:/mnt# asd 1>>rightlog 2>>errorlog
root@ubuntu-jpk:/mnt# cat rightlog
Thu Aug 29 20:51:20 CST 2019
root@ubuntu-jpk:/mnt# cat errorlog
No command 'asd' found, but there are 22 similar ones
asd: command not found
在shell脚本中不用每个命令都去后面都执行>> >
可以在脚本开头exec 1>file即可
输入重定向了解即可
root@ubuntu-jpk:/mnt# wc <<EOF

as
asd
asdd
EOF
3 3 12

管道
把前一个命令的输出对接到后一个命令的输入,管道对接的2个命令的文件描述符。grep等常用管道来进行检索。
root@ubuntu-jpk:/mnt# date | wc
1 6 29
root@ubuntu-jpk:/mnt# cat /etc/passwd |grep root
root:x:0:0:root:/root:/bin/bash

状态码
0是正确,其他都有问题。
如果使用exit 退出指定退出码大于255,就会对256取余操作。
linux shell 基础语法A-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!