shell语法

Posted 未来可期-2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell语法相关的知识,希望对你有一定的参考价值。

shell语法

文章目录

1. 简介

#!/bin/bash //告诉系统这个脚本需要什么解释器执行
echo "hello world" //用于向窗口输出文本

作为可执行程序

chmod +x ./test.sh
./test.sh //不加./,系统首先会去PATH中,./会在本目录下查找

2. shell变量

your_name="hello world" //变量名和等号之间不能有空格
echo $your_name //使用一个定义过的变量
readonly your_name //将变量定义为只读变量
unset your_name //删除变量
shell中存在三种变量 局部变量,环境变量,shell变量

shell字符串

shell字符串,可用单引号,双引号,不加引号
str='this is a string'
str="this is a string"
str="hello $your_name"
str='hello $your_name'
echo $#str //获取字符串长度
echo $str:1:4 //提取子串
echo `expr index "$string" io` //查找子串位置

shell数组

shell数组,shell支持一维数组,用空格符号分割
array_name=(value0 value1 value2 value3)
array_name[i]=n //写
$array_name[i] //读
$array_name[@] //获取数组中全部元素
length=$#array_name[@] //获取数组长度
<==> length=$#array_name[*]
length=$#array_name[i] //获取数组单个元素长度

shell注释

# 这是注释
//或者多行注释
:<<EOF
comment1
comment2
EOF

3. shell传递参数

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
./test.sh 1 2 3
$0 #获取执行文件名
$i #第i个参数
$# #传递到脚本的参数个数
$* 以一个单字符显示所有向脚本传递的参数
$@ 使用时加引号,并在引号中返回每个参数

4. shell基本运算符

bash不支持简单的数学运算,可以通过expr和awk实现
  1 a=10
  2 b=20
  3
  4 val=`expr  $a + $b`
  5 echo "a+b=$val"
  6
  7 val=`expr $a - $b`
  8 echo "a-b=$val"
  9
 10 val=`expr $a \\* $b`
 11 echo "a*b=$val"
 12
 13 val=`expr $b / $a`
 14 echo "a/b=$val"
 15
 16 if [ $a == $b ]
 17 then
 18         echo "a==b"
 19 fi
 20 if [ $a != $b ]
 21 then
 22         echo "a!=b"
 23 fi
 24 if [[ 1 < 2 && 2 < 3 ]]
 25 then
 26         echo "hello world"
 27 fi
#字符串运算符
  1 a="abc"
  2 b="efg"
  3
  4 if [ $a = $b ]
  5 then
  6         echo "a==b"
  7 else
  8         echo "a!=b"
  9 fi
 10
 11 if [ $a != $b ]
 12 then
 13         echo "a!=b"
 14 else
 15         echo "a==b"
 16 fi
 17 if [ -z $a ]
 18 then
 19         echo "字符串长度为0"
 20 else
 21         echo "字符串长度不为0"
 22 fi
 23 if [ -n $a ]
 24 then
 25         echo "字符串长度不为0"
 26 else
 27         echo "字符串长度为0"
 28 fi

5. echo命令

3 echo It is a test
4 #显示转义字符串
5 echo "\\"This is a test\\""
6 your_name="lcx"
7 echo "$your_name"
8 #显示换行
9 echo -e "OK!\\n"
10 echo "It's a test"
11 #显示不换行
12 echo -e "OK!\\c"
13 echo "It's a test"
14 #显示结果定向到文件中
15 echo "hello world" > "./file"
16 #显示命令执行结果
17 echo `date`

6. printf功能

printf format-string [arguments]
%s字符串
%d整型输出
%c字符串输出
%f实数输出
%-10s -表示左对齐,没有表示右对齐,10表示显示在10个字符之内
%-4.2f 表示控制在小数点2位
4 echo "hello world"
5 printf "hello world\\n"
6
7 # 格式化控制
8 printf "%-10s %-8s %-4s\\n" 姓名 性别 体重kg
9 printf "%-10s %-8s %-4.2f\\n" 郭靖 男 66.12345
10 printf "%-10s %-8s %-4.2f\\n" 郭芙 女 47.9876

7. test

用于检查文件是否存在
1 #!/bin/sh
2 #检查某个条件是否成立
3 num1=100
4 num2=100
5 if test $num1 -eq $num2
6 then
7         echo "两个数相等"
8 else
9         echo "两个数不相等"
10 fi
11
12 result=[$num1+$num2]
13 echo "result=$result"
14
15
16 if test -e ./bash
17 then
18         echo "文件已存在"
19 else
20         echo "文件不存在"
21 fi
22
23 cd /bin
24 if test -e ./notFile -o -e ./bash
25 then
26         echo "至少有一个文件存在"
27 else
28         echo "两个文件都不存在"

8. 流程控制

if控制
if condition1
then
	cmd1
	cmd2
	cmd3
elif condition2
then
	cmd1
	cmd2
	cmd3
fi
for控制
for var in item1 item2 item3 ... itemN
do
	cmd1
	cmd2
	cmd3
done
while控制
while condition
do
	command
done

int=1
while(( $int <= 5 ))
do
	echo "$int"
	let "int++"
done
无限循环
while :
while true
for(( ; ; ))

case控制
case value in
1)
	cmd1
	cmd2
;;//表示break,执行结束,跳出整个case
2)
	cmd1
	cmd2
;;
*)
	cmd1
	cmd2
;;
esac
循环中的break和continue

9. shell函数

1 function fun1()
2         echo "this is my first shell function"
3 
4
5 echo "函数开始执行"
6 fun1
7 echo "函数执行结束"
8
9
10 function funwithParams()
11         echo "第一个参数为$1"
12         echo "第二个参数为$2"
13         echo "第三个参数为$3"
14         echo "第四个参数为$4"
15         echo "参数总共有$#个"
16         echo "所有参数为$*"
17 
18 funwithParams 1 2 3 4 5

10. shell输入输出重定向

#标准输入和标准输出均为终端,0是标准输入stdin,1是标准输出stdout,2是标准错误输出stderr
command>file 将输出重定向到file
command>>file 将输出以追加方式重定向到file
command<file 将输入重定向到file
n >& m 将输出文件m和n合并
n <& m 将输入文件m和n合并

11. shell文件可以包含外部脚本

file1
url="www.baidu.com"
file2
source ./file1#|| . ./file
echo "菜鸟教程官网是$url"

以上是关于shell语法的主要内容,如果未能解决你的问题,请参考以下文章

shell编程2语法

shell 编程

用逗号和等号分隔的Shell脚本解析文本文件

Shell中的变量

Linux之Shell编程(13)

Shell编程-10-Shell中的数组