前言
最近在复习shell脚本的相关知识,本文列举了一些在shell脚本中用得到的一些基础语法。
1:打印常见内部变量和环境变量值
shell中常用变量介绍
$0 | 脚本名 |
$n | 第n个参数,n=1,2,3... |
$* | 所有参数列表(视为一个整体,不包括脚本名) |
$@ | 所有参数列表(独立字符串、不包括脚本名) |
$# | 参数个数(不包含脚本名) |
$$ | 当前进程PID |
$! | 后台运行的最后一个进程PID |
$? | 执行上一个指令的返回值,如果为0,证明上一个命令正确执行 |
#1:打印一些变量
echo $#
echo $0
echo $1
echo $$
echo $?
echo $!
echo "hello world"
echo $HOME
echo $PWD
2:$@和$*之间的区别
#2:比较$@和$*
echo $@
echo $*
for var in "$@"
do
echo $var
done
for val in "$*"
do
echo $val
done
可以看到$@和$*不加“”括起来是没有区别的,当用“”括起来之后,$@会将参数独立看待,而$*会将全部参数视为一个整体。
3:自定义变量,将命令执行的结果返回给变量
在自定义一个变量的时候“=”两端不要加空格,可以将shell指令的返回值传给变量
#3:自定义变量,定义的时候不要加空格,将命令的结果返回给变量
A=100
echo "A = $A"
B=$(pwd)
echo $B
4:运算符,实现加减乘除简单算数操作
将表达式用[]括起来后里面的语句和正常的加减乘除操作相同
#4:运算符,实现加减乘除操作
SARFF=$[1200+4]
echo $SARFF
echo $[$1*$2]
5:if条件判断,字符串(=),数值比较(-lt -gt -le -ge -eq -ne),文件权限(-r -w -x ),文件、目录是否存在,是否为一个普通文件( -f -d -e)
shell脚本目录下的文件和目录
注意if语句的中括号两端要有空格 ,否则会报错
#5:条件判断
if [ "ok100" = "ok" ]
then
echo "equal"
fi
if [ 30 -gt 20 ]
then
echo "greater than"
fi
if [ -r $0 ]
then
echo "$0 can read"
fi
if [ -w $0 ]
then
echo "$0 can write"
fi
if [ -x $0 ]
then
echo "$0 can execute"
fi
if [ -e 1.txt ]
then
echo "1.txt exists"
fi
if [ -d dir ]
then
echo "dir exists"
fi
if [ -f 1.txt ]
then
echo "1.txt is a normal file"
fi
6:流程控制
实现C语言中的if else 语句
#6:流程控制
if [ $1 -gt 60 ]
then
echo "$1 greater than 60"
elif [ $1 -le 60 ]
then
echo "$1 little equal 60"
fi
7:循环语句(for和while)
for循环和while循环都是实现1加到100的和
#7:for循环
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "SUM = $SUM"
#while循环
j=0
NUM=0
while [ $j -le 100 ]
do
NUM=$[$NUM+$j]
j=$[$j+1]
done
echo "NUM = $NUM"
8:从控制台输入数据,C语言中scanf函数功能
使用read来实现输入功能,-p后的内容是提示信息,-t可以限制输入参数的时间
#8:从控制台获取参数,实现scanf作用
read -t 5 -p "input a num" NUM2
echo "you input NUM2 = $NUM2"
在限制时间5s中之内输入数据
超过5s还未输入数据
9:函数的简单使用
#9:自定义函数
function getAdd(){
SUM=$[$n1+$n2]
echo "SUM = $SUM"
}
read -p "input first num" n1
read -p "input second num" n2
getAdd $n1 $n2
定义函数要用function关键字,函数功能是实现求两数的和
总结
本文只涉及了shell脚本的一小部分内容,目的是为了能够使用shell脚本实现一些简单的功能。