shell程序
第一行指定用哪个程序来编译和执行脚本 下面两个等价
#! /bin/bash
#! /bin/sh
系统变量
- 系统环境变量的位置
/etc/profile
- 系统用户变量的位置
find -type f -name '.bash_profile' #查找用户环境变量
source .bash_profile #重启用户 环境变量
- 环境变量一般用大写字母表示
shell变量
- 一般shell变量赋值的时候不用带$,使用或者输出的时候需要带$,加减乘除的时候需要加入两层小括号,括号外面要有一个$,括号里面的变量可以不使用$,需要注意的是变量的赋值和变量的使用不能有空格。
- shell变量类型中只有整形和字符串
- shell变量表达式
表达式 | 说明 |
---|---|
${#string} | 计算$string的长度 |
${string:position} | 从position处开始提取字符串 |
${string:position:len} | 从position处开始提取长度为len的字符串 |
#!/bin/sh
a=10
b=20
c="this is a test"
d=$((a+b))
echo $c
echo "a="$a #输出a的值
echo $d
echo ${d} #也可以
echo $((a/b)) #0
echo "这是原始的字符串:"$c
echo '"${#c}" '${#c}
echo '"${c:5}" '${c:5}
echo '"${c:5:2}" '${c:5:2}
#! /bin/sh
echo "hello shell $1 $2 $3"
#$1,$2,$3可以接收外面传递的参数
./test.sh shanda beautiful
. test.sh shanda beautiful
#输出结果 hello shell shanda beautiful
#当其中有空格的时候,用双引号括起来
$?:表示前面最后一个命令退出的状态
$$:脚本运行的当前进程号
$0:表示当前脚本名称
$1-$9:表示第一到第九个位置参量
$10:表示第10个位置参量
$#:表示位置参量的个数
$!:脚本运行的最后一个进程号
退出码
exit N 退出状态为0表示没有错误
exit N 退出状态大于0表示有错误
数组
arr=(math english chinese)
#引用变量:${arr[0]}
#数组个数:${#arr[*]}
#所有元素:${arr[*]}
#数组赋值:arr[0]=hello
判断
需要注意的是使用[]时必须是每个变量之间都要有空格和左右中括号也要有空格。
test -e filename|[-e filename]:表示文件是否存在
test -d filename 判断文件是否是文件夹
test -f filename 判断文件是否是文件
test -r filename 判断是否有可读权限
test -w filename 判断是否有可写权限
test -x filename 判断是否有可执行权限
test n1 -eq n2 && echo "n1==n2" || echo "n1!=n2"判断n1是否等于n2
test n1 -ne n2 判断n1是否不等于n2
test n1 -gt n2 判断n1是否大于n2
test n1 -lt n2 判断n1是否小于n2
test n1 -ge n2 判断n1是否大于等于n2
test n1 -le n2 判断n1是否小于等于n2
test -z string 判断字符串是否为0 若string是空字符串返回为true
test -n string 判断字符串是否非为0 若string是空字符串返回为false
test n1=n2 判断n1是否等于n2
或者是[ n1==n2 ]
if判断
多条件判断的时候可以使用&& 和||
if [条件];then
当条件成立时候执行指令工作雷荣
fi表示结束if条件
if [条件];then
do some things
elif [条件]; then
do some things
else
do some things
fi
循环
#!/bin/sh
for var in 1 2 3 4 5
do
echo ${var}
done
while 条件
do
do something
done
break命令同样适用于shell语句,break跳出所有循环
break 表示跳出当前循环 默认值是1 表示跳出当前循环 也可以加入其他参数,表示跳出多层循环 break 2
continue 表示结束当前循环 默认值是1
#!/bin/sh
for var in 1 2 3
do
echo "1"
for var1 in 3 4 5
do
break 2
echo "2"
done
done
#结果是 1 跳出了外层的循环
for var in 1 2 3
do
echo "1"
for var1 in 3 4 5
do
break 1
echo "2"
done
done
# 结果是 1 1 1
shell函数
shell函数的返回值只能是整数,一般用来表示函数的执行成功与否,0表示成功,其他值表示失败,如果return值返回的是一个字符串,会发生错误。
#!/bin/sh
printStr()
{
echo "hello"
return "fsdf"
}
printStr
#输出结果
#hello
#bash: return: fsdf: numeric argument required