shell 基本编程
Posted ericguoxiaofeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 基本编程相关的知识,希望对你有一定的参考价值。
最基本:记住前面的:#!/bin/bash;以及文件后缀名一般都是.sh
[[email protected] scripts]# vi helloworld.sh #!/bin/bash echo "hello world"
然后记得给脚本添加权限,因为默认是读写权限罢了;默认给全部人添加权限:
chmod +x helloworld.sh
在当前目录下,两种方法执行该脚本
./helloworld.sh sh helloworld.sh
如果非当前目录,例如上一级目录,则:记得注意空格哦:
sh scripts/helloworld.sh ./scripts/helloworld.sh
--------------------------------------set--------------------------------------------
得到当前所有变量。例如:
[[email protected] scripts]# set | grep HOME HOME=/root JAVA_HOME=/usr/local/jdk1.8.0_181
另外:注意PWD;不同的路径下输出的值不一样,输出的值为当前路径
----------------------------------------变量---------------------------------------------------
单引号或者双引号只是为了让空格也变成一个整体
[[email protected] scripts]# param=xiaofeng [[email protected] scripts]# echo param param [[email protected] scripts]# param02="xiao feng02";param03=‘xaio feng03‘; [[email protected] scripts]# echo $parma02;echo $param03 xaio feng03
单双引号的区别:这里双引号脱意了,单引号并没有,爽引号更强大
[[email protected] scripts]# echo "$param02";echo ‘$param02‘; xiao feng02 $param02
例子,知道 STR="hello world" 想用其打印“hello worlds is greater”注意那里有个S。应该:
[[email protected] scripts]# STR="helloworld" [[email protected] scripts]# echo ${STR}s is great helloworlds is great
用大括号括住
-----------------------------------export以及shell-----------------------------------------------------------------------
a 和 b 在不同的进程,所以b无法共享a的变量
[[email protected] scripts]# cat a.sh #!/bin/bash a=hahaha echo "in a-----"$a [[email protected] scripts]# cat b.sh #!/bin/bash ./a.sh echo "in b-----"$a [[email protected] scripts]# ./b.sh in a-----hahaha in b-----
这样子呢:不可以啊,因为b调a,b是父。a是子,a定义export,只是让a的子进程有用
[[email protected] scripts]# cat a.sh #!/bin/bash export a=hahaha echo "in a-----"$a [[email protected] scripts]# cat b.sh #!/bin/bash ./a.sh echo "in b-----"$a [[email protected] scripts]# ./b.sh in a-----hahaha in b-----
应该这样
[[email protected] scripts]# cat a.sh #!/bin/bash export a=hahaha echo "in a-----"$a ./b.sh [[email protected] scripts]# cat b.sh #!/bin/bash echo "in b-----"$a [[email protected] scripts]# ./a.sh in a-----hahaha in b-----hahaha
结论:export A #可把变量提升为当前shell进程中的全局环境变量,可供其他子shell程序使用
或者:source 的意思是使 b.sh 也在 a.sh 的进程里面
[[email protected] scripts]# cat a.sh #!/bin/bash a=hahaha echo "in a-----"$a source /home/xiaofeng/scripts/b.sh [[email protected] scripts]# cat b.sh #!/bin/bash echo "in b-----"$a [[email protected] scripts]# ./a.sh in a-----hahaha in b-----hahaha
注意:source 也可以用“.”代替
. /home/xiaofeng/scripts/b.sh
将命令值赋予给一个变量,反引号:``
[[email protected] scripts]# ll total 12 -rwxr-xr-x. 1 root root 75 Jul 29 20:05 a.sh -rwxr-xr-x. 1 root root 31 Jul 28 15:08 b.sh -rwxr-xr-x. 1 root root 32 Jul 28 14:24 helloworld.sh [[email protected] scripts]# a=`ll` [[email protected] scripts]# echo $a total 12 -rwxr-xr-x. 1 root root 75 Jul 29 20:05 a.sh -rwxr-xr-x. 1 root root 31 Jul 28 15:08 b.sh -rwxr-xr-x. 1 root root 32 Jul 28 14:24 helloworld.sh [[email protected] scripts]# a=`date` [[email protected] scripts]# echo $a Sun Jul 29 20:14:40 CST 2018 [[email protected] scripts]#
或者美元加括号
[[email protected] scripts]# a=$(date) [[email protected] scripts]# echo $a Sun Jul 29 20:16:38 CST 2018
4、特殊变量
$? 表示上一个命令退出的状态码
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1)
$# 表示参数的个数,常用于循环
$*和[email protected] 都表示参数列表
[[email protected] scripts]# date Sun Jul 29 20:18:55 CST 2018 [[email protected] scripts]# echo $? 0 [[email protected] scripts]# ad -bash: ad: command not found [[email protected] scripts]# echo $? 127 [[email protected] scripts]# true [[email protected] scripts]# echo $? 0 [[email protected] scripts]# false [[email protected] scripts]# echo $? 1
$n
[[email protected] scripts]# cat c.sh echo $1 $2 $3 [[email protected] scripts]# ./c.sh aaa bbb ccc aaa bbb ccc
END!
以上是关于shell 基本编程的主要内容,如果未能解决你的问题,请参考以下文章