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

Linux Shell编程之基本概念

shell if 语句

shell编程基本语法和变量

代码片段:Shell脚本实现重复执行和多进程

Shell脚本编程基础——Linux基本命令(11)

Linux bash基础特性二