Shell Script(未完)
2019-01-09 本文已影响5人
sunpy
什么是Shell
Shell 是一种脚本语言,任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。Shell作为一种解释型语言,边执行边翻译,不会像C++那样生成可执行文件。而Shell本身无需编译,执行运行源码。
HelloWorld
使用touch命令创建sunpy.sh或者touch命令随便创建一个文件分配一个可执行权限也可以
echo "HelloWorld!"
helloworld.png
变量
- 定义变量
命名规范:字母、数字、下划线
variable=value
variable='value'
variable="value"
说明:单引号的变量里面的值是什么就输出什么,而双引号的变量里面的值会先解析其中的变量。
- 修改变量
重新赋值变量即可
name=sunpy
name=sunpy1
- 将命令结果赋值给变量(注意:下面是圆括号)
variable=`command`
variable=$(command)
例子:
# sunpy.sh
name=$(cat sunpy)
echo "hello, $name"
#sunpy
echo "HelloWorld"
结果:
[root@izuf6ea4rfo45y44oj74jhz shell_program]# sh sunpy.sh
hello, echo "HelloWorld"
- 只读变量
name="456"
readonly name
name="123"
结果:sunpy.sh: line 3: name: readonly variable
- 删除变量
name="123"
unset name
传参
- 脚本传参
# sunpy.sh
echo "hello, ${1}, ${2}"
执行:sh sunpy.sh SHELL SUNPY
结果:hello, SHELL, SUNPY
- 函数传参
function execute() {
echo "hello, ${1}, ${2}"
}
execute SHELL SUNPY
执行:sh sunpy.sh
结果:hello, SHELL, SUNPY
问题:如果外边同样也传入了参数,那么结果还是函数内的结果(小范围屏蔽大范围)
Shell特殊变量
- $$:当前 Shell 进程 ID。
- $0: 当前脚本的文件名。
- $#:传递给脚本或函数的参数个数。
- $n(n≥1):传递给脚本或函数的参数。
echo "Process ID: $$"
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Total: $#"
结果:
[root@izuf6ea4rfo45y44oj74jhz shell_program]# sh sunpy.sh fp sp
Process ID: 21368
File Name: sunpy.sh
First Parameter : fp
Second Parameter : sp
Total: 2
- $* 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。$@ 仍然将每个参数都看作一份数据,彼此之间是独立的。两者都表示传递脚本和函数的参数。
count1=0
count2=0
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
let count1+=1
done
echo ${count1}
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
let count2+=1
done
echo ${count2}
结果:
[root@izuf6ea4rfo45y44oj74jhz shell_program]# sh sunpy.sh a b c
print each param from "$*"
a b c
1
print each param from "$@"
a
b
c
3
- $?获取函数返回值
function add(){
return $(expr $1 + $2)
}
add 10 5
echo $?
[root@izuf6ea4rfo45y44oj74jhz shell_program]# sh zhangjl.sh
15
条件语句
function compare(){
if [ $1 > $2 ]
then
return 1
else
return 0
fi
}
compare 10 5
echo $?
结果:
1
循环语句
叠加:
i=1
total=0
while (( i <= 10 ))
do
let "total+=i"
let "i+=1"
done
echo ${total}