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语法的主要内容,如果未能解决你的问题,请参考以下文章