这里主要记录一些Shell的常用语法,便于后期记忆和查找。
1. 变量的定义与输出
echo "Hello World"
# 定义变量时不能有空格
A=10
echo "A = $A"
echo
# 表示当前文件
echo $0
# 表示第一个传入的参数
echo "the first arg is $1"
# 表示第二个传入的参数
echo "the second arg is $2"
echo
# ? * #
# ? 表示上一条命令是否执行成功 0 表示成功
echo $?
# * 表示所有的参数
echo $*
# # 表示参数的个数
echo $#
# 当前文件的绝对路径
echo $PWD
echo
# expr (expression)表达式的缩写,通过这个可以进行算术运算
num1=2
num2=3
# num3=2 + 3 如果要进行算术运算,必须要有空格与 『+』 分开 ,注意:这样直接赋值是错误的
echo $num1+$num2
echo $num1 + $num2
echo `expr $num1+$num2`
echo `expr $num1 + $num2`
2. 运算方式
# 算术运算方式
# 1. 使用$(()) $只是取值符
# 2. 使用$[]
# 3. 使用let命令
# 4. 使用expr外部程式
a=$(( 2 + 4 ))
echo $a
b=$[ 3 + 5 ]
echo $b
let c=7+8
echo $c
# 注意空格,推荐使用这种,多数环境是支持的
d=`expr 9 + 9`
echo $d
# 算术运算符
# + - * / % = == !=
# 关系型
# -eq 相等 -ne 不相等
# -gt 大于(greater than) -lt 小于(less than)
# -ge 大于等于(greater equal) -le 小于等于(less equal)
# 布尔型
# ! 非 -o 或(or) -a 与(and)
# 逻辑型
# && ||
# 字符串
# = 检测是否相等 != 检测是否不相等
# -z 检测字符串长度是否为0 -n 检测字符串长度是否 不 为0
# $ 检测字符串是否为空,不为空返回true
s1=""
s2="efg"
if (( $s1 = $s2 ))
then
echo "s1 equal s2"
else
echo "s1 not equal s2"
fi
if [ -z $s1 ]
then
echo "the length is 0"
else
echo "the length is not 0"
fi
3. if条件判断
# if(表达式); then
# echo " < "
# else
# echo " > "
# fi
if((100 > 200)); then
echo " < "
else
echo " > "
fi
# 一些常用的判断操作
# -f 判断文件是否存在
# -d 判断文件夹是否存在
# -eg 等于(整形比较)
# -ne 不等于比较
# -le 小于比较
# -ge 大于比较
# -a 双方都成立
# -o 单方成立
echo
DIR=$PWD/createDir
if [ -d $DIR ]
then
echo "dir already exists"
else
mkdir -p $DIR
if(($? == 0)); then # 注意:括号是括号,表达式是表达式,表达式的一部分就是括号
echo "create successd"
else
echo "create fail"
fi
fi
4. for 循环
# for 变量 in 字符串
# do
# 语句
# done
for i in `seq 1 10`
do
echo "$i"
done
# 累加从1到100
echo
j=0
for((i=1;i<=100;i++))
do
j=`expr $j + $i`
done
echo "total is $j"
# 打印当前目录下的所有文件
echo $0
for i in `find $PWD -name "*.sh"`
do
echo $i
done
# while 条件语句
# do
# 语句
# done
echo
i=0
while((i<10))
do
i=`expr $i + 1`
echo $i
done
echo
i=0
# 注意while当前行空格的位置,空格错一个都不能通过
while [[ $i -lt 10 ]]
do
i=`expr $i + 1`
echo "lt $i"
done
5. 函数
# 基本格式
# name(){
# command
# command2
# }
# 基本格式2
# [ function ] funname [()]{
# action;
# [return int;]
# }
function test(){
echo "this is a function"
}
function test1(){
# 实际上 $ 表示的是函数中的输入,可以理解为第一个形参,并非是外面的$1
echo "this is input data : $1"
}
test
test1 $1
# 比如:实现一个阶乘
t=1;
function factorial(){
for((i=1;i<=$1;i++))
do
# t=$[ $i * $t ]
t=`expr $i \* $t ` # 注意反斜杠
done
echo "$1 factorial is : $t"
}
factorial $1
# return test
function functionReturn(){
read -p "please input a number: " num
# 如果这里不定义返回值,如果执行成功会返回0,不成功则返回1-255之间的错误码
# 但是:return 只能返回 0-255之间的值,如果要返回字符串或者大于255的值,也会溢出,这时你需要使用echo
return $[ $num * 2 ]
}
functionReturn
echo "the return number is : $?"
# return test1
function functionReturn1(){
read -p "please input a number: " num
echo $[ $num * 2 ]
}
functionReturn1
# 这里的输出只能表示成功与否
echo "the return number is : $?"
# 需要去函数的值
result=`functionReturn1`
echo "the return number is : $result"
6. 文件操作
# while read line
# do
# echo $line
# done<文件名
while read line
do
echo $line
done<$PWD/test.sh
网友评论