1.Shell概述
Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口
Shell 将用户输入的命令并且把它们送到内核执行,然后返回执行结果
Shell 是可编程的,它允许用户编写由shell命令组成的程序
默认shell
/etc/shells
当前登录用户默认shell
echo $SHELL
当前shell
echo $0
2.Shell脚本基础知识
1)解释器:Shell脚本是静态代码,若要输出结果,还需要解释器参与
一般脚本第一行,指定执行此脚本的解释器
如果不指定解释器,脚本也能在默认解释器中运行
#!/bin/bash #!/bin/csh
2)脚本执行方式
sh 1.sh
./1.sh
他人的脚本,需要可执行权限“X”
后台执行脚本符:&
./1.sh &
nohup ./1.sh & 可在退出shell后,脚本仍保持运行
---------------------------------------------------------------------------------------------------------------------------------
shell 编辑基础
1)输入输出、管道
文本流端口:标准输入、标准输出、标准错误
例:date 命令
date 为标准输入
date的结果为标准输出
datee为标准错误(输入输出)
输出重定向
将date标准输出定向到date.txt文件中
date > date.txt
将标准输出追加到date.txt文件中
date >> date.txt
输入重定向
date.txt做为wc命令的输入对象
wc < date.txt (效果等同于cat date.txt | wc)
内联输入重定向
分屏显示你输入的内容,直接出现某标记(EOF)后中止输入
less << EOF
管道符“|”:将一个命令的输出,做为另一个命令的输入
cat date.txt | wc
2)Shell中的字符
# 注释,只用做说明
' 字符串引用,echo 'i am leon!he is nancy'
\ 转义符,使特殊符号失去本身意义 echo \$abc
/ 路径分隔符
! 反逻辑符(反义词)
" 也是字符串引用
单引号' 与 双引号" 区别
单引号不能调用字符串中的变量
双引号可以调用字符串中的变量
变量$
变量赋值
a='hello world'
echo a
echo $a
取消赋值
unset a
变量的类型:环境变量,用户自定义变量
a='hello world'
echo 'i am $a teacher'
echo "i am $a teacher"
命令替换
vim 1.sh
#!/bin/bash
b=`date` (反引号)Esc键下的~ 英名输入
echo $b
效果等同于
b=$(date)
echo $b
变量替换
A=Linux
echo $AB #表示变量AB
echo ${A}B
LinuxB
3)shell运算符
+ - * / % = == !=
关系运算符
-eq (equal)等于
-ne (no equal)不等于
-gt (greater than)大于
-lt (less than)小于
-ge (greater equal)大于等于
-le (less equal)小于等于
布尔运算条款
! “非”运算
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a is no equal to b"
else
echo "$a != $b : a is equal to b"
fi
---------------------------------------------------------------------------------------------------------------------------------
循环语句
1)if条件语句
语法:
if 命令
then
命令
fi
示例:
vim guess.sh
#!/bin/bash
a=3
b=$1
if [ $a == $b ]
then
echo "you win"
else
echo "please guess again"
fi
. guess.sh 1
. guess.sh 2
. guess.sh 3
请输入值1到9
多条件判断语句
cat 值 in (
范围)命令;
范围 命令
esac
2)for循环
for 变量 in 列表
do
command1
command2
...
done
3)while循环
用于不断执行一系列命令,也用于从输入文件中读取数据
---------------------------------------------------------------------------------------------------------------------------------
脚本实例
while + if
判断位置参数是否是一个文件,如果是,则输出文件内容,否则提示
vim wf.sh
#!/bin/bash
while [ $1 ]
do
if [ -f $1 ]
then echo "display:$1"
cat $1
else echo "$1 is not a file name"
fi
shift
done
. wf.sh guess.sh
#shift的意义,当输入的参数执行完之后,抛弃