工作需要学习入门的shell脚本知识,觉得还蛮有意思,做了一些笔记整理一下。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
引用了百度百科上对shell的定义介绍,不求甚解,为快速掌握只学习了一些工作学习中可能会经常用到的命令和理论知识,若以后有机会深入学习,继续补充更多理解。
三种引号
1、单引号''
单引号中内容不转义、不解析,输入什么输出什么。需提一下,shell中变量赋值输出语句的知识,
随便起一个变量名直接输入,再赋值一个数,输出时候用echo语句,echo就是输出的意思,$符号加上之前随便起的变量名,这样就完成了一个变量的定义赋值输出。
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ demo=123
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ demo1=${demo}123
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ echo $demo1
123123
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ demo1='${demo}123'
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ echo $demo1
${demo}123
上述命令,用到拼接{},需要将两个变量拼接在一起时候就要用到这个符号,没有单引号会输出转义后的结果,加上单引号直接输出''中内容。
2、双引号
双引号中内容转义,接上述命令,
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ demo1="${demo}123"
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ echo $demo1
123123
其实,这里双引号的效果等同于不加任何引号,都会转义。
3、反引号
所谓反引号就是Tab键上面Esc键下面那个按键,反引号会转义命令,假设输入whoami命令,会得出登录的用户名,
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ demo2=`whoami`
bert.zuo@SZMIS-180891 MINGW32 /e/bertZuo-study/shell
$ echo $demo2
bert.zuo
反引号等同于$(),
demo = `whoami`
等同于
demo = $(whoami)
重定向操作
1、重定向 >
本来定向一个地方,可以重新定向另一个地方。
另外提一点:seq 10 可得出1-10的排列数
seq 1 2 10 代表1-10每隔2打印,得出1 3 5 7 9
seq 10 > test.txt
echo "有十个数" >> test.txt
重定向就是输出,先把test.txt 文件中清空,再输入需要重定向的数据,如果之前没有该文件就创建一个。
2、追加重定向 >>
上例中 >> ,在test.txt 文件原有数据后,接着输入新的数据。
3、清空文件
> test.txt
管道 |
先提一点:查看一个文件中内容
cat test.txt
通过管道可以将连接两条命令,将前一条命令(标准输出)作为下一条命令的标准输入。
cat test.txt | grep 1
后接一条grep 1,即过滤器,过滤出存在1所在的行。
cat test.txt | head -9 | head -5
上例命令代表留下test.txt 数据中前9条数据,再留下前9条数据中的前5条数据。
计算
1、输出计算数
echo $((1+2*3))
内部括号不可少,这种输出的计算方式为内置方式是最快的。
2、伪随机数
for i in `seq 1000`;do echo $RANDOM >> number.txt;done
cat number.txt | awk '{if(length($0)<=3)print}'
取特定范围伪随机数
echo $(($RANDOM%10))
含数字字母随机数
echo $RANDOM | md5sum | cut -c 1-6
指定1-6位的随机数,可用于6位随机验证码。