一:了解shell
作为命令语言互动式地解释和执行用户输入的命令是Shell的功能之一;Shell还可以用来进行程序设计;
2:基本机构介绍
shell如果要以#!/bin/bash 开头 则 #!/bin/bash 必须放在第一行
符号"#!"用来告诉系统它后面的参数是用来执行该文件的程序(解析器),
要使脚本可执行,需要给该脚本文件赋予执行权限
chmod a+x 脚本文件
3:脚本的调用
- 相对路径调用脚本:[root@study001 shell]# sh touch.sh
- 绝对路径调用脚本:[root@study001 /]# sh /study/shell/touch.sh
4:注释
在进行shell编程,以“#”开头的的语句直到这一行的结束表示注释
二:shell变量
1:系统变量
HOME:用于保存用户主目录的完整路径名
PATH:用于保存用冒号分割的目录路径名,Shell将按PATH 变量中给出的顺序搜索这些目 录,找到的第一个与命令名称一致的可执行文件将被执行
UID:当前用户的UID
PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化
2:用户自定义变量
变量名=变量值
在定义变量时,变量名前面不加符合"$",在引用该变量的时候在变量名前加"$"。在给变量赋值的时候,等号两边一定不要有空格,如果变量值本身有空格,则整个字符串都要用双引号包裹起来,在编写Shell程序时,为了变量名喝命令名相区别,建议所有的变量名都用大写字母来表示
在说明一个变量并将它设置为一个特定值后就不再改变他的值时
readonly 变量名
在任何时候创建的变量都只是当前Shell的局部变量,所有不能被Shell运行的其他命令或shell程序所利用,而export命令可以将一个局部变量提供给Shell命令使用
export 变量名
export 变量名=变量值
3:shell 预定义变量
预定义变量和环境变量相类似,也是shell在一开始时就定义了的变量,所有的预定义变量都是由符号"$"和另一个符合组合而成的
$#:位置参数的数量 (获取所有输入参数个数 长用于循环)
$*:所有位置参数的内容 (获取所有输入参数的值 将所有的参数看成一个整体)
$@: 和$*类似 但是 $@是将每个参数区分对待
$?:命令执行后返回的状态,0:表示没有错误,非0表示有错误
$$:当前进程的进程号
$0:当前执行的进程名
$n: n代表数字,$1-$9 表示第一个到第九个参数,十个以上的参数需要用大括号包含,如 ${10}
4:$(),${},$的区别
1:$() 与 ``(反引号)作用一样 都是执行里面的程序将结果返回
2:$和${} 都是引用变量的 一般情况下 $和${]是没有区别的 但是用${} 会比较精确的界定变量名称的范围
三:变量表达式
1:字符串比较
=:比较两个字符串是否相等,相等则为"是"
!=:比较两个字符串是否相同,不同则为“是”
-n:比较字符串的长度是否大于0,如果大于0则为“是”
-z:比较字符串的长度是否等于0,如果等于0则为“是”
2:数字比较
-eq:相等
-ge:大于等于
-le:小于等于
-ne:不等于
-gt:大于
-lt:小于
3:逻辑测试
!:与另一个逻辑值相反的逻辑值
-a:两个逻辑值为“是”,返回值才为“是”,反之为“否”
-o:两个逻辑值有一个为“是”,返回值就为“是”
4:文件操作比较
-d:对象存在且为目录则返回值为“是"
-f:对象存在且为文件则返回值为”是“
-r:对象存在且可读则返回值为”是“
-w:对象存在且可写则返回值为”是“
-x:对象存在且可执行则返回值为”是“
-s:对象存在且长度非0则返回值为”是“
!:取测试条件的相反值
注:[ condition ] condition前后要有空格 condition为测试条件
四:shell条件判断语句
if条件语句
1:if-then-fi
if [ condition ];then
命令行;
fi;
2:if-then-else-fi
if [ condition ];then
命令行1;
else
命令行2;
fi;
3:if-then-elif-else-fi
if [ condition ];then
命令行1;
elif...
命令行2;
else
命令行3;
fi;
case条件语句
case value in
value1)
命令行。。。
;;
value2)
命令行。。。
;;
value3)
命令行。。。
;;
。。。。。。--泛指多个
*)--都不满足的时候执行
其他命令
esac
五:shell循环语句
for循环语句
第一种格式:
for变量 in 列表; do
循环体
done
第二种格式:
for ((变量=初始值 ; 变量范围 ; 变量变化方式)); do
循环体
done
for循环的列表生成方式:
{n..m}:通过花括号,中间是变量的遍历范围,从n到m都为变量的遍历
`seq [起始数 [步进长度]] 结束数` `seq 1 2 10`变量的遍历值为1 3 5 7 9 超过十就退出遍历
while循环语句
while 条件判断
do
循环体
done
练习:读取一个数据文件
while read Line
do
echo "${read}"
do < 数据文件