shell基础编程
shell是文本文件
批量的linux的命令集
该文件能被shell解释执行
就是shell脚本文件
通常由一段linux命令、shell命令、控制语句及注释语句构成
shell编写
shell脚本是纯文本文件,可以使用任何文本编辑器编写
shell脚本通常是以.sh为后缀
- 第一行
指定用那个程序来编译和执行脚本
#! /bin/bash或者#! /bin/sh
注释使用# - 变量
变量名:
变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线,任何其他字符都标志变量名的结束
变量名区分大小写
输出:
$ echo ${变量名}
环境变量:
所有用户可用
$ echo $JAVA_HOME
全局变量,按照惯例需要大写
先vi .bash_profile
ecport 环境变量(大写)
source .bash_profile
变量赋值:
等号两边不能有空格
如果要给变量赋空值,可以在等号后面跟一个换行符
清除变量:
unset
显示所有的变量:
set
执行:
chmod u+x test.sh
./test.sh或者. test.sh或者sh test.sh
位置参量:
位置参量时一组特殊的内置变量,通常被shell脚本用来从命令行接受参数,被函数用来保存传递给它的参数
执行shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本名后面的用空格隔开的每个字符串都被称为位置参量
在脚本中使用这些参数时,需通过位置参数来引用。例如:$1表示第一个参数,$2表示第二个参数,以此类推。 9 以 后 需 要 用 花 括 号 吧 数 字 括 起 来 , 如 第 十 个 位 置 参 量 以 9以后需要用花括号吧数字括起来,如第十个位置参量以 9以后需要用花括号吧数字括起来,如第十个位置参量以{10}的方式访问
echo “hello $1-$2” 执行时 ./test.sh caramel
目的 | linux命令 |
---|---|
表示当前脚本的文件名 | $0 |
位置参量的个数 | $# |
以单位字符串显示所有位置参量 | $* |
脚本运行的当前进程号 | $$ |
最后一个后台运行的进程的进程号 | $! |
显示前面最后一个命令的退出状态,0表示没有错误,其他任何值都表示有错误 | $? |
- 数组
$ arr=(zhangsan lisi wangwu)
$ echo ${arr[0]} zhangsan
$ echo ${arr[*]} 所有数组内容 - 时间
$ date 时间
$ date + %Y-%m +代表格式 - 判断
用test判断
目的 | linux命令 |
---|---|
文件名是否存在 | test -e |
文件名是否存在且为档案(file)常用? | test -f |
文件名是否存在并为目录?(常用) | test -d |
两数值相等 | -eq |
两数值不等 | -ne |
n1大于n2 | -gt |
n1小于n2 | -lt |
n1大于等于n2 | -ge |
n1小于等于n2 | -le |
判定字符串是否为0?若string为空字符串,则为true | test -z string |
判定字符串是否为0?若string为空字符串,则为false | test -n string(-n 可省略) |
判定str1是否等于str2,若相等,则回传true | test str1 = str2 |
判定str1是否等于str2,若相等,则回传false | test str1 != str2 |
用[ ]判断
[root@www ~]#[ -z "HOME"];echo $?
用if判断
if [判断语句];then执行操作
多重复杂判断式
if……thenelif……thenelse
- 循环
for:
for var in 1 2 3 4 5
do
echo${var}
done
while:
while[条件]
do
done
- 文件读取:
从文件或命令中逐行读取
cat file | while read line
do
echo ${line}
done
cat 'ls ./*.txt' | whlie read line
do
echo ${line}
done