1.什么是shell
shell是内核的保护壳
从程序角度看,shell本身是一种用C语言写的程序
从用户角度看,shell是命令解释器
同时,shell还是一门编程语言 shellscript
2.shell类型
sh bash csh ksh kcsh... //查看当前系统上有效的shell
echo $SHELL //查看当前的登录shell
Linux系统选择bash作为系统的默认登录shell
3.bash特点及使用
1.命令历史
bash能够记录你使用过的所有指令,上下键可以找到之前的指令
history
vim .bash_history
vim .bashrc
HISTSIZE=1000
HISTFILESIZE=2000
!编号
2.补全功能 table
指令补全
文件名补全
3.命令别名 alias
alias 指令别名='很长的指令'
alias rm='rm -i'
4.作业控制,前台后台
& 把这个命令放到后台执行
fg 将后台中的命令调至前台继续运行,
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令
调出%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
jobs 查看当前有多少在后台运行的命令
ctrl+z 可以将一个正在前台执行的命令放到后台,并且暂停
5.shell脚本
windwos使用.bat 批处理文件
Linux的shell脚本也有类似功能,但更强大
4.shell语法
总览
变量
条件
程序控制
函数
1.变量
环境变量
env
export PATH
/etc/profile
~/.profile
~/.bashrc
e2 mydir=/home/csgec/temp
cd $mydir
另一个使用自定义变量的地方就是脚本中
特殊变量
$? 表示上一个命令的退出码
echo $?
设置变量的规则:
1.变量名称与C语言类似,只能是字母和数字,数字不能用于开头
2.变量名与变量值用等号连接
3.等号两边不能有空格 *****
4.如果变量内容包含空格,那么必须用引号引起来 *****
5.可以通过在变量名前加一个$符号来访问它的内容 *****
6.通常大写字符是系统预设变量,自定变量用小写,以示区分,方便判断
2.第一个脚本程序
#开头的行表示注释
#!/bin/bash 这个就不是注释,是告诉系统,使用哪个shell来解释执行该脚本
echo 用于显示,相当于printf
脚本的执行:
1.给脚本添加 可执行权限
./xxx.sh
2./bin/sh xxx.sh
3.source xxx.sh //开发板上必须使用该指令来执行脚本
3.条件:
test 条件
[ 条件 ]
测试字符串
str1 = str2 相等返回真
!=
>
<
-n string 不为空,则为真
-z string 为空,则返回真
测试算术表达式
expr1 -eq expr2 相等
-nq 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
测文件:
-d 是目录则为真
-f 是普通文件
-e 存在则为真
-r
-w
-x
4.if语句
#方式1
if 条件
then
语句
fi
#方式2
if 条件
then
语句
elif 条件
then
语句
else
语句
fi
5.for语句
for 变量 in 字符列表
do
语句
done
反引号:获取指令的执行结果
例如1:
for d in 1 2 3 4 5
do
echo $d
done
输出:
1
2
3
4
5
例如2:
sum=0;
for ((j=0; j<5; j++))
do
((sum+=j))
done
输出:
sum: 10
6.while语句
while 条件
do
语句
done
例如:
!/bin/bash
i=0
while ((i<3))
do
((i++))
echo "hello"
done
7.case语句
case 变量 in
匹配模式)语句;;
...
匹配模式)语句;;
esac
8.字符串处理 EL
${....}
path=/home/csgec/a.txt
${path#*/}:删除第一个/及其左边的字符串,从左至右
home/csgec/a.txt
${path##*/}:删除最后一个/及其左边的字符串,从左至右
a.txt
${path%/*}:删除第一个/及其右边的字符串,从右至左
/home/csgec
${path%%/*}:删除最后个/及其右边的字符串,从右至左
9.函数
不带参函数
function test() #定义函数
{
echo "this is a function"
}
test #调用函数
输出:
this is a function
带参参数
s1=1
s2=2
function sum()
{
res=$[$s1+$s2]
echo $res
}
sum $1 $2
输出:
3
10.数组
array=(1,2,3,4,5,6) #初始化数组
index=0
while ((index <6))
do
echo ${array[index]} #输出数组内容
((index+=1))
done
或者
for data in $array
do
echo $data
done
输出如下:
1,2,3,4,5,6
11. 获取环境变量
12. 基本运算
example1=$[3*5]
echo $example1
example2=$((1+2*3))
echo $example2
输出:
15
7
13. shell调用其它shell脚本
#!/bin/bash
source /test/demo.sh
13. case语句
read data
case $data in
1)
echo "this is 1"
;;
2)
echo "this is 2"
;;
3)
echo "this is 3"
;;
*)
echo "this is error"
;;
esac
shell之把ubuntu dash切换为bash
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh