Shell Script(未完)

2019-01-09  本文已影响5人  sunpy

什么是Shell

Shell 是一种脚本语言,任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。Shell作为一种解释型语言,边执行边翻译,不会像C++那样生成可执行文件。而Shell本身无需编译,执行运行源码。

HelloWorld

使用touch命令创建sunpy.sh或者touch命令随便创建一个文件分配一个可执行权限也可以

echo "HelloWorld!"
helloworld.png

变量

  1. 定义变量
    命名规范:字母、数字、下划线
variable=value
variable='value'
variable="value"

说明:单引号的变量里面的值是什么就输出什么,而双引号的变量里面的值会先解析其中的变量。

  1. 修改变量
    重新赋值变量即可
name=sunpy
name=sunpy1
  1. 将命令结果赋值给变量(注意:下面是圆括号)
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"
  1. 只读变量
name="456"
readonly name
name="123"

结果:sunpy.sh: line 3: name: readonly variable

  1. 删除变量
name="123"
unset name

传参

  1. 脚本传参
# sunpy.sh
echo "hello, ${1}, ${2}"

执行:sh sunpy.sh SHELL SUNPY
结果:hello, SHELL, SUNPY

  1. 函数传参
function execute() {
        echo "hello, ${1}, ${2}"
}
execute SHELL SUNPY

执行:sh sunpy.sh
结果:hello, SHELL, SUNPY
问题:如果外边同样也传入了参数,那么结果还是函数内的结果(小范围屏蔽大范围)

Shell特殊变量

  1. $$:当前 Shell 进程 ID。
  2. $0: 当前脚本的文件名。
  3. $#:传递给脚本或函数的参数个数。
  4. $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
  1. $* 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。$@ 仍然将每个参数都看作一份数据,彼此之间是独立的。两者都表示传递脚本和函数的参数。
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
  1. $?获取函数返回值
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}
上一篇下一篇

猜你喜欢

热点阅读