发布时间:2020/12/04 作者:天马行空 阅读(1796)
shell基础语法
#!/bin/bash echo "Hello, world!"
上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行;
变量
#变量赋值
bianliang="aaa"
#删除变量
unset bianliang
#输出变量
echo ${bianliang}
#如果变量存在则返回word
echo ${bianliang:+word}
#变量不存在返回word,但不改变bianliang的值
echo ${bianliang:-word}
#变量不存在返回word,并给bianliang赋值
echo ${bianliang:=word}
#echo $bianliang
参数
#输出当前脚本的文件名 echo $0 #输出脚本传递的第一个参数 echo $1 #输出脚本传递参数的个数 echo $# #脚本传递的所有参数 echo $* echo $@ #当前脚本的进程ID echo $$
上一条命令返回的退出状态,执行成功返回0,失败返回1
echo $?
获得一个命令执行后的返回值
#它的意思就是说我们把一个命令的输出赋值给一个变量,方法为把命令用反引号(在Esc下方)引起来 directory=`ls` echo $directory
Shell运算符
条件测试语句可以分为 4 种:
1、文件测试语句;
2、逻辑测试语句;
3、整数值比较语句;
4、字符串比较语句。
文件测试运算符
| -d | 测试文件是否为目录类型 目录返回0 | 
| -e | 测试文件是否存在 | 
| -f | 判断是否为一般文件 | 
| -r | 测试当前用户是否有权限读取 | 
| -w | 测试当前用户是否有权限写入 | 
| -x | 测试当前用户是否有权限执行 | 
逻辑运算符
| && | “与”,都满足 | 
| || | “或”,其中一个满足 | 
| ! | “非”,取相反值判断 | 
整数比较运算符
| -eq | 是否等于 | 
| -ne | 是否不等于 | 
| -gt | 是否大于 | 
| -lt | 是否小于 | 
| -le | 是否等于或小于 | 
| -ge | 是否大于或等于 | 
字符串比较运算符
| = | 比较字符串内容是否相同 | 
| != | 比较字符串内容是否不同 | 
| -z | 判断字符串内容是否为空 | 
#注意运算符两边一定要要空格,不然就是在拼接字符串,不会执行运算 a=2 b=9 #加 echo `expr $a + $b` echo $[$a+$b] #减 echo `expr $a - $b` echo $[$a-b] #乘 echo `expr $a \* $b` echo $[$a*$b] #关系运算符 [ $a -eq $b ] #相等 [ $a -ne $b ] #不相等 [ $a -gt $b ] #> [ $a -ge $b ] #>= [ $a -lt $b ] #< [ $a -le $b ] #<= #字符串运算符 [ $a = $b ] #相等 [ $a != $b ] #不相等 [ -z $a ] #字符串长度为0,返回true [ -n $a ] #长度不为0返回true [ $a ] 不为空返回true #文件测试运算符 file=/home/wwwroot/www/shellstudy.sh if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi
字符串
#拼接字符串
a='abcde';
echo "aaaa${a}aaaaaa"
#获取字符串长度
echo ${#a}
#截取字符串
echo ${a:0:2}
#查找字符串
echo `expr index $a cde`
数组
a=(1 2 3 4 5)
a[0]=1
a[1]=2
a[2]=3
a[3]=4
#读取下标为2的值
echo ${a[2]}
#读取数组的全部元素
echo ${a[*]}
#获取数组的长度
length=${#a[*]}
echo $length
#获取数组全部下标
xb=${!a[*]}
echo $xb
流程控制语句
#if语句,注意条件表达式两边应该都有一个空格 a=2 b=3 if [ $a -eq $b ] then echo "===" else echo "!=" fi if [ $a -eq $b ] then echo "相等" elif [ $a -gt $b ] then echo "$a>$b" elif [ $a -lt $b ] then echo "$a<$b" fi
#for循环
arr=(1 2 3 4)
for i in ${arr[*]}
do
   echo "${i}"
done
for((i=1;i<=5;i++));do
    echo "这是第 $i 次调用";
done;
while
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
    echo "是的!$FILM 是一个好网站"
done
#until循环
a=0
until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done#case命令
a=1
read a
case ${a} in
1) echo 'aaaaa'
;;
2) echo 'bbbbb'
;;
3) echo 'ccccc'
;;
*) echo 'error'
;;
esac#死循环 break
while true
do
   read a
   case ${a} in
   1|2|3|4) echo "你输入了${a}"
   ;;
   *) echo "你要输入1-4之间的数字"
      break
   ;;
   esac
done
#死循环 continue
while true
do
   read a  
   case ${a} in 
   1|2|3|4) echo "你输入了${a}" 
   ;;
   *) echo "你要输入1-4之间的数字" 
      continue
   ;;
   esac
done
shell函数
#定义
function testF(){    
    echo "hell world $1 $2"
}
#调用函数
testF a b
#删除函数
unset .f testF注意:
1、 调用函数只需要给出函数名,不需要加括号。
2、函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。
3、Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。
4、函数的参数可以通过 $n  得到。
实例:获得当前系统中还可以使用的内存大小,单位M
[root@netljc ~]# mem=`free -m | grep 'Mem' | awk '{print $4}'`
[root@netljc ~]# echo $mem先使用 free -m 命令查看内存使用量情况(单位为 MB),然后通过 grep Mem:命令过滤出剩余内存量的行,再用 awk '{print $4}'命令只保留第四列,最后用 mem=`语句`的方式把语句内执行的结果赋值给变量