一、基本知识
1、shell不需要经过编译器编译,是解析型语言
2、shell脚本文件第一行必须协商#!/bin/bash,告诉当前脚本都使用/bin/bash工具进行解析
二、语法
1、普通变量
赋值号两边没有空格,最好有双引号(词组必须有双引号),变量跟C语言规则类似
2、系统预定义好的环境变量
echo $PATH(操作系统在哪些目录中搜索可执行文件)
echo $PWD
3、命令行变量
$#:参数的个数
$@/$*:输出所有的参数
$n:n表示数字,表示输出第几个参数
$?:最后一个命令的返回值
$$:当前shell的进程号
例子:
hello.sh中
echo "参数个数:"$#
echo "所有参数@" $@
echo "所有参数*" $*
echo "上一条shell命令的返回值*" $?
echo "第三个参数*" $3
在命令行中输出
./hello.sh 123 hi hhh
则会输出:
参数个数:3
所有参数: 123 hi hhh
上一条shell命令的返回值: 0
第三个参数:hhh
4、特殊符号
单引号(‘ ’):将内容毫无保留输出
双引号(将单词组括起来,不然第二个单词会被误为命令)(“ ”)‘
双引号可以引用其他变量
myName=Even_Lau
tree="$myName tree"
echo $tree # 输出则是 Even_Lau tree
#双引号所包含的内容还可以是一个命令
time="today is `date`" # date 是一个获取当前时间的命令
反引号(` `):若有该符号,则date表示时间,没有则为单词
5、管道:ls -l | wc当中,ls -l收集当前目录下文件的信息,然后送给管道,wc从管道读出来,计算出行数、单词个数和总字符
6、一般0:标准输入,1:标准输出,2:标准出错
ls -l 1>a.txt #ls -l命令原本要输出1号描述符(即在命令行中输出变成保存在a.txt中)
echo 0<b.doc,将从b.doc读取数据,而不是从键盘中读取
echo “hello world” 1>&2:讲一句话输出到标准出错设备中去