shell脚本语法小记

2019-05-14  本文已影响0人  凌福义


1、变量

如果一个$变量表达式放在双引号""中,则程序执行到此处会替换成变量值,如果放在单引号'',则不会发生替换现象,如果加上转椅字符\,则会原文输出取消其特殊含义

#!/bin/sh
var ="hello"
echo $val
echo "$var"
echo '$var'
echo \$var
echo enter some test
read var
echo '$var' now equals $var

输出结果如下图所示

./bash.sh
hello
hello
$var
$var
enter some test
hello world
$var now equals hello world

1.2、环境变量


$HOME:当前bash用户家目录
$PATH:以冒号分隔用来搜索命令的目录列表
$PS1:命令提示符,通常是字符,但在bash中可以使用更加复杂的值,比如字符串[\u@\h\W]就是一个流行的默认值,它给出了用户名、机器名以及当前目录名、也包括一个$字符

$PS2:二级提示符,提示后续输入,通常为>字符
$IFS:输入域分隔符,当shell提示输入时,给出用来分隔单词的一组字符
$0:shell脚本名称
$#:shell参数个数
$$:shell脚本进程号,脚本程序通常用其生成一个临时唯一文件,比如/tmp/tmpfiles_$$
$1,$2,$3:脚本第一个 第二个 第三个参数
$*:脚本所有参数,使用IFS将其分隔,如果IFS为空,则参数会挤在一起
$@:脚本所有参数,跟IFS无关(推荐使用)


2、条件

使用test或者[命令
条件测试分为3类:

#字符串相同则结果为真
string1 = string2      
#字符串不同则结果为真
string != string2     
#字符串不为空则结果为真
-n string                    
#字符串为null则结果为真
-z string                    
#表达式结果相等则结果为真
val1 -eq var2
#表达式不相等则结果为真
var1 -ne var2
#var1 大于var2则结果为真
var1 -gt var2
#var1 大于或等于var2则结果为真
var1 -ge var2
#var1 小于var2则结果为真
var1 -lt var2
#var1 小于或等于var2则结果为真
var1 -le var2
#表达式为假则结果为真
! expression
#文件为目录
-d file
#文件存在则结果为真
-f file
#文件group id为真
-g file
#文件的user id为真
-u file
#文件可读
-r file
#文件可写
-w file
#文件大小不为0
-s file
#文件可执行
-x file

3、控制结构

if condition
then
  statements
else
statements
fi
#!/bin/bash
for val in a b c 
do 
echo $var
done

遍历输出/home下的所有.sh文件

#!/bin/bash
for file in $(ls /home/*.sh) 
do 
echo $file 
done
while condition
do
statements
done
############
until condition
do 
statements
done
#!/bin/bash
#单一匹配case
echo "please input yes or no'
read var
case "$var" in
yes) echo "var is $var";;
no) echo "var is $var";;
y) echo "var is $var";;
n) echo "var is $var";;
esac

##合并匹配case
case "$var" in
yes | y | Yes | YES) echo "var is $var";;
no |n | No | NO) echo "var is $var";;
esac
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ]
then
echo "file 1 2 3 is exist"
fi
if [ -f file1 ] || [ -f file2 ] || [ -f file3 ]
then
echo "file 1 2 3 someone is exist"
fi

4、函数

基本shell函数如下:

#!/bin/bash
foo(){
return 0
}
echo start
foo
echo end

5、命令

x =`expr $x+1` 
上一篇 下一篇

猜你喜欢

热点阅读