Shell语法
程序员文章站
2022-04-24 10:17:35
...
编写shell脚本第一步,命名是以xx.sh结尾,但是编写内容的第一行一定要加上
#!/bin/bash
类似于java类中的第一行一定是包名。#代表引入/bin/bash。除了第一行的#,下面再使用#都是代表注释的意思。
#!/bin/bash
echo “demo”
运行该脚本,显示没有权限
$./demo.sh
-bash:./demo.sh:permission denied
因此需要给与运行权限
$chmod 777 demo.sh
$./demo.sh
demo
另外通过:
$/bin/bash demo.sh
demo
这种情况下不需要给与权限。
声明变量
局部变量声明与使用
#!/bin/bash
A=20
echo $A
$./demo.sh
20
环境变量
#!/bin/bash
echo $PWD
$./dmeo.sh
/root
$PWD代表当前路径
输入参数
#!/bin/bash
echo $0
echo $1
echo $2
echo "this \$? is $?"
echo "this \* is $*"
echo "this \# is $#"
$./demo.sh test1 test2 test3
./demo.sh
test1
test2
this $? is 0
this \* is test1 test2 test3
this \# is 3
循环语句for
for 变量 in 字符串
do
语句
done
#!/bin/bash
for i in `seq 1 15`
do
echo "数字$i"
done
j=0
for((i=0;i<=100;i++))
do
j=`expr $i + $j`
done
echo $j
$./numner.sh
数字1
数字2
数字3
数字4
数字5
数字6
数字7
数字8
数字9
数字10
数字11
数字12
数字13
数字14
数字15
5050
循环语句while
while条件语句
do
语句
done
#!/bin/bash
i=0
while((i<100))
do
echo "数字 $i"
i=`expr $i + 1`
done
$./while.sh
数字 0
数字 1
数字 2
数字 3
数字 4
数字 5
...
上述脚本语句等价于
#!/bin/bash
i=0
while [[ $i -lt 100 ]]
do
echo "数字 $i"
i=`expr $i + 1`
done
使用while读取文件
#!/bin/bash
while read line
do
echo $line
done</root/text.txt
if语句
#!/bin/bash
NUM1=200
NUM2=300
if (( $NUM1>$NUM2));then
echo "NUM1>NUM2"
else
echo "NUM1<NUM2"
fi
辑运算符
#!/bin/bash
NUM1=200
NUM2=300
if (( $NUM1> $NUM2 )); then
echo "NUM1>NUM2"
else
echo "NUM1<NUM2"
fi
#!/bin/bash
FILE_PATH=/root/text.txt
if [ ! -f $FILE_PATH ]; then
touch $FILE_PATH
else
echo "文件已创建"
cat $FILE_PATH
fi
算数运算
算术运算符###### 算数运算方式
1. 使用$(())
$r=$(( 5 + 5 ))
$echo $r
10
2. 使用$[]
$r=$[6+9]
$echo $r
15
3. 使用let命令
$n=19
$let n=n+1
$echo $n
20
4. 使用expr外部程式
$n=`expr 1 + 1 `
$echo $n
2
关系运算符
注意:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
布尔运算符
#!/bin/bash
a=10
b=20
if [ $a!=$b ];then
echo "$a != $b : a不等于b"
else
echo "$a != $b : a等于b"
fi
$./bool.sh
10 != 20 : a等于b
逻辑运算符
字符串运算符
a="abc"
b="efg"
if [ $a = $b ];then
echo "$a = $b : a等于b"
else
echo "$a = $b : a不于b"
fi
if [ -z $a ];then
echo "-z $a : 字符串长度为0 "
else
echo "-z $a :字符串长度不为0 "
fi
$./bool.sh
abc = efg : a不于b
-z abc :字符串长度不为0
文件测试运算符
重定向
输入重定向
$ cat 0 < text.txt
hello world
0代表屏幕地址 < 和文件地址需要有空格
输出重定向
$echo hello world > file
$cat file
hello world
方法参数传递机制详解(函数编程)
函数格式
无返回值的函数
#!/bin/bash
a=1
factorial(){
for((i=1;i<$1;i++))
do
a=$[ $a * $i]
done
echo "$1的阶乘是 $a"
}
factorial 10
$./factorial.sh
10的阶乘是 362880
#!/bin/bash
a=1
factorial(){
for i in `seq $1`
do
a=`expr $a \* $i`
done
echo "$1的阶乘是 $a"
}
factorial $1
$./factorial.sh 10
10的阶乘是 362880
注意:函数必须先定义在调用,自上而下
带返回值的函数
#!/bin/bash
fun(){
read -p "请输入数值" num
echo $[2*$num]
}
result=`fun`
echo "fun return value is:$result"
$ ./function.sh
请输入数值12
fun return value is:24
注意:如果返回的值是0-255之间的可以只用用return,但是大于255的只能用echo进行返回