shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。shell是命令解析器,用户输入命令,它去解析。
(一)通配符
(二)管道
管道可以把一系列命令连接起来,意味着第一个命令的输出将作为第二命令的输入,通过使用“|”连成一个管道;
comand1 | command2 //把一个命令command1执行结果作为command2的输入传给command2
ls | wc -w //查看文件的单词数
cat test.c | grep hello //输出test.c中hello
(三)重定向
(四)命令置换
命令置换:将一个命令的输出作为另一个命令的参数。
commad1 ·commad2· //命令comand2的输出将作为命令commad1的参数。
(五)链接命令
ln -s 1.c link.c //软链接建立
ln 1.c lindk.c //硬链接建立
(六)环境变量
1、PATH 和 HOME
echo $PATH #输出PATH环境变量
echo $HOME #s输出HOME环境变量
2、给环境变量追加内容: 格式 export PATH=$PATH:(增加的内容)
3、env 输出环境变量
env #输出所有环境变量
env $PATH #输出PATH环境变量
(六)其他命令
1、alias --- 取别名(相当于C++中的引用)
alias ll=`ls -l` #ll就相当于ls -l
2、find用法:find + 路径 + 选项 + “查找内容”
find ./ -name "test*" //查找当前目录的test开头的文件
find ./ -nmae "[A-Z]*" //查找当前目录大写字母开头的文件
find ./ -nmae "[A-Z]*" -printf //查找当前目录大写字母开头的文件
find ./ -name "test" -tpye d//查找test目录
-type 查找某一类型的文件,诸如:
(一)步骤
(二)shell变量
#! /bin/sh
cout=1
echo $cout
echo ${cont} #和上面等价
name='xiaoming'
echo $name
set | grep cout #查看变量名和值,将输出num=5
#!/bin/bash
index=8
echo ${index:+"123"}
num=11
echo ${num:?"124"}
echo ${a:-"100"}
b=22
echo ${b:="200"}
num=99
echo ${num}
unset num
echo ${num} #输出空
(三)位置参数变量
#! /bin/sh
echo $0
echo $#
echo $@
echo $*
echo $?
echo $$
注意:#!/bin/bash 表示根据这个得到解释器的类型,调用相对的解释器。
(四)算数运算
expr <加(+)、减(-)、乘(\*)、整除(\)、求模(%) >
expr 12 + 5\*3 //27
num=9
sum=`expr $num / 6` #sum = 1
echo $sum
let用法
在shell中可以使用let来指示命令是算术表达式,let表达式内变量不用加$
num=9
let sum=9/6 #或者"sum=9/6"
echo $sum
(五)test命令
test -d test
echo $? #输出结果
(六)整数测试
a=9
b=9
test $a -eq $b
echo $? #输出0
(七)字符串
#!/bin/sh
str1="xiaoming"
str2="xiaohong"
if [ $str1 = $str2 ] #[等价] if [ "$str1"="$str2" ]两边要有空格,
then echo "="
else echo "!="
fi
if [ ${str1}\>${str2} ] #等价 if test $str1\>$str2
then echo ">"
else echo "<"
fi
if [ -n $str1 ]
then echo "1111"
else echo "0000"
fi
if [ -z $str1i ]
then echo "2222"
else echo "0000"
fi
(七)条件语句
格式:
1、if [ 表达式 ] //[]两边有空格
2、if test 表达式1 选项 表达式2
3、if test 选项 表达式
1、if...then...fi
if 表达式
then 命令表
fi
2、if...then...else...fi
if 表达式
then 命令表1
else 命令表2
fi
3、if...then...elif then...esle...fi
a=9
b=8
if test $a -eq $b
then echo $a
else echo $b
fi
(八)多路分支语句
case $_ in
模式1)
命令表1
;;
模式2)
命令表2
;;
模式n)
命令表 n
;;
esac
a=2
case $a in
1)
echo xiaoming
;;
2|8)#2或8
echo xiaohong
;;
esac
#!/bin/sh
char='b'
case $char in
a)
echo xiaoming
;;
b|B)
echo xiaohong
;;
esac
(九)循环语句
1、for循环
for...do...done
for 变量名 in 单词表
do
命令表
done
for num in 1 2 3 4 5
do
echo "hello $num"
done
//打印出
hello 1
hello 2
hello 3
hello 4
hello 5
for((num=1;num<=5;num++))
do
echo "hello $num"
done
2、while循环
while...do...done
while 命令式表达式
do
命令表
done
num=1
while test $num -lt 5
do
echo "num=$num"
num=`expr $num + 1`
done
read num #相当于C中scanf
while test $num -lt 5
do
echo "num=$num"
num=`expr $num + 1`
done
while((num<=5))
do
echo "num=$num"
num=`expr $num + 1`
done
(十)break 和 continue
for num in 1 2 3 4 5
do
if test $num -eq 2
then break
fi
echo "hello $num"
done
(十一)shell函数
函数名称在当前脚本必须唯一,如果存在相同名称的函数,以最后一个为准。
函数的创建方法一:
function 函数名称 {
命令
}
函数的创建方法二:
函数名称() {
命令
}
函数的调用方法:
函数名称 参数1 参数2 ...
调用函数时可以传递参数,函数中使用$1、$2......来引用传递的参数。
function fun()
{
echo "hello word!"
}
fun
function fun()
{
echo "hello word!"
echo $1
}
fun 12
function fun()
{
echo "hello word!"
return 43
echo $1
}
fun 12
echo $?