Shell:内部核心与外部使用者联系的介质!
Shell:解释型语言
Shell Script <==> DOS 批处理
#!/bin/sh 开头路径
#!/bin/sh
date
pwd
Shell 一般要先给可执行权限,或使用内部命令source
和 sh
执行
Shell 变量
常用的系统变量及其含义
$#: 保存程序命令数
$0: 当前程序名
$*: 以("$1 $2…")形式保存所有输入的命令行参数
$@: 以("$1" "$2"…)形式保存所有输入的命令行参数
$n:$n为命令行的第n个参数
例子:
echo "the No. of parameter is $#";
echo "the script name is $0";
echo "the parameters in the script are $*";
echo "the parameters in the script are $3";
注意:
1. 参数中间一定要有空格
2. Shell参数和C语言参数的一个区别是shell不把文件名作为参数,而c语言参数把文件名当作第一个参数
Shell的环境变量
Shell环境变量时所有Shell程序都会接受的参数。Shell程序运行时,都会接收一组变量,这组变量就是环境变量,常用的Shell变量有:
PATH:Shell寻找程序或命令的目录
HOME:当前用户主目录的完全路径
HISTSIZE:历史记录数
LOGNAME:当前用户的登陆名
HOSTNAME:主机名称
Shell:Shell路径名
LANGUGE:语言相关的环境变量,多语言可以修改此环境变量
MAIL:当前用户的邮件存放目录
PWD:当前工作目录的绝对路径
显示变量 #echo $HOME
设置变量 #expert WELCOME = "HE" //只改变当前的环境变量
查看所有变量 #env
查看本地变量 #set
删除变量 #unset
查询变量 #env|grep WELCOME //管道的使用 或者 #set|grep WELCOME
用户变量
几个特殊功能
变量扩张
${var}
字符串截断功能
分为左截断和右截断
* 任意n个字符 ? 任意一个字符
//左截断的例子
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo} //##最长匹配
rthought.jpg
$ echo ${MYVAR#*fo} //#最短匹配
odforthought.jpg
//右截断的例子
$ MYVAR="chickensoup.tar.gz"
$ echo ${MYVAR%%.*} //最长截断
chickensoup
$ echo ${MYVAR%.*} //最短截断
chickensoup.tar
流程控制
if语句
if [-e ./test.sh] //这里条件的写法其实更难!!!
then
echo "..........."
else
echo ",,,,,,,,,,,"
fi
case语句
#!/bin/sh
Test=test.tar.gz
case "${Test##*.}"in
gz)
tar -xzvf $Test ;;
bz2)
tar -xjvf $Test ;;
*)
echo "formar error" ;;
esac
循环语句
#!/bin/sh
Mynum=0
while [ $Mynum -ne 10 ]
do
echo $Mynum
Mynum=$(($Mynum + 1))
done
#!/bin/sh
for x in 1 2 3
do
echo $x
done
#!/bin/sh
for x in ./t*
do
echo $x
done