欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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代表当前路径

输入参数

Shell语法

#!/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

辑运算符
Shell语法

#!/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

算数运算

Shell语法

算术运算符Shell语法###### 算数运算方式
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
关系运算符

Shell语法
注意:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

布尔运算符Shell语法
#!/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
逻辑运算符Shell语法
字符串运算符Shell语法
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 
文件测试运算符Shell语法

重定向

输入重定向

$ cat 0 < text.txt
hello world

0代表屏幕地址 < 和文件地址需要有空格

输出重定向

$echo hello world > file
$cat file
hello world

方法参数传递机制详解(函数编程)

函数格式Shell语法

无返回值的函数
#!/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进行返回