shell脚本基础

================================================================================

查看一下系统支持的shell

# chsh -l

# cat /etc/shells

[root@localhost ~]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
[root@localhost ~]# 
[root@localhost ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

 

打印当前shell的进程ID

# echo $$

[root@localhost ~]# echo $$
1565

 

打印子shell的进程ID

[root@localhost ~]# bash
[root@localhost ~]# 
[root@localhost ~]# echo $$
2092

 

一、变量

1、本地变量

取消变量

# unset aa

2、环境变量

环境变量可影响子shell

定义环境变量

 查看UID、GID

打印path,每个路径都是以冒号隔开。

 su加“-”和不加“-”涉及到家目录和环境变量的问题。加“-”有环境变量。

不加“-”

$ su root

加“-”

$ su - root

 Linux环境配置文件---------.bashrc文件

.bashrc文件主要保存个人的一些个性化设置,如命令别名、路径等。

也即在同一个服务器上,只对某个用户的个性化设置相关。

修改“.bashrc”对当前用户生效

# vi .bashrc

修改“/etc/bashrc”对所有用户生效

# vi /etc/bashrc 

我们敲命令的时候,是需要写这个命令的路径的

如果你没有写路径的话,则会到默认指定的路径里去找

当你登录终端的时候,系统会自动的执行家目录下面的一些隐藏文件.bashxxxx

3、位置变量

[root@localhost ~]# cat eg19.sh 
#!/bin/bash
echo "这是我的第一个脚本,脚本的名字是:$0"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "第三个参数是:$3"

 执行结果如下:

[root@localhost ~]# sh eg19.sh 
这是我的第一个脚本,脚本的名字是:eg19.sh
第一个参数是:
第二个参数是:
第三个参数是:
[root@localhost ~]# 
[root@localhost ~]# sh eg19.sh du jia li
这是我的第一个脚本,脚本的名字是:eg19.sh
第一个参数是:du
第二个参数是:jia
第三个参数是:li
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# sh eg19.sh a b c
这是我的第一个脚本,脚本的名字是:eg19.sh
第一个参数是:a
第二个参数是:b
第三个参数是:c

 (1)、basename和dirname的区别

[root@localhost ~]# basename /usr/share/doc/
doc
[root@localhost ~]# 
[root@localhost ~]# dirname /usr/share/doc/
/usr/share
[root@localhost ~]# 
[root@localhost ~]# basename /usr/share/doc
doc
[root@localhost ~]# 
[root@localhost ~]# dirname /usr/share/doc
/usr/share

  一个命令中牵扯到另一个命令,另一个命令需要加反引号esc(退出键)下面那个按键``

#!/bin/bash
echo "这是我的第一个脚本,脚本的名字是:`basename $0`"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "第三个参数是:$3"

 执行结果如下:

[root@localhost ~]# chmod +x eg19.sh 
[root@localhost ~]# 
[root@localhost ~]# ./eg19.sh a b c
这是我的第一个脚本,脚本的名字是:eg19.sh
第一个参数是:a
第二个参数是:b
第三个参数是:c

 (2)、set设置变量

# set a b c d e f g h i j k l m n

[root@localhost ~]# set a b c d e f g h i j k l m n
[root@localhost ~]# 
[root@localhost ~]# echo $0
-bash
[root@localhost ~]# 
[root@localhost ~]# echo $1
a
[root@localhost ~]# 
[root@localhost ~]# echo $2
b
[root@localhost ~]# 
[root@localhost ~]# echo $3
c
[root@localhost ~]# 
[root@localhost ~]# echo $4
d
[root@localhost ~]#
[root@localhost ~]# echo $9
i
[root@localhost ~]#
[root@localhost ~]# echo $10
a0
[root@localhost ~]# 
[root@localhost ~]# echo ${10}
j
[root@localhost ~]# 
[root@localhost ~]# echo $11
a1
[root@localhost ~]# 
[root@localhost ~]# echo ${11}
k

 

(3)、echo中的双引号和单引号

注意{}和反斜杠\

 echo中的单引号

 

$#和$*

$#判断有多少个参数

$*判断有哪些参数

if条件语句,条件成立,则执行then后面的内容 

if [ 条件 ]    ;      then   

 当我们执行完一个命令之后,这个命令的结果会放在一个地方  $?

正确   为0

错误  为非零

2、返回值

利用返回值判断用户是否是否存在

 

3、对比

数值对比:

-eq(等于)equal

-gt(大于)greater than

-ge(大于等于)greater equal

-lt(小于)less than

-le(小于等于)less equal

-ne(不等于)not equal

 

条件表达式:

【】 、【【】】     注:前后要有空格

test                  注:加测试表达式

 

字符对比

==(等于)

!=(不等于)

【】和【【】】的区别

[ $name == tom ]------------?为通配符

判断是否为纯数字

# [[ $aa =~ ^[0-9]+$ ]]

判断是否具有某个属性

-r      测试当前用户是否有权限读取(Read)

-w    测试当前用户是否有权限写入(Write)

-x     测试当前用户是否有权限执行(eXcute)

-d     测试是否为目录(Directory)或目录是否存在

-e     测试目录或文件是否存在(Exist)

-f     测试是否为文件(File)或文件是否存在

 

 

 

!-----------------取反

连接符:

&&(and)全真为真,一假全假

||(or)

例:一假全假

 

例:全真为真

&&按顺序执行

直到遇到假,执行结束

||(or)一真全真

||(or)全假为假

 ||按顺序执行

直到遇到真,执行结束

 

$[]、$(())、expr、let、declare都不能用小数

$[]和$(())用法相同

expr只能做加减运算

let

 

let连加

加号写在后面bb=aa++(先把aa的值,赋值给bb)后加先赋值

加号写在前面bb=++aa(aa先加1再赋值给bb)先加后赋值

 declare定义成整形

 bc(计算器)

scale小数点后几位

 

如果某个命令需要和用户交互,那么你可以通过echo的方式把要输入的值通过管道发给这个命令。

 

 

posted on 2018-09-24 22:40  阿小杜  阅读(490)  评论(0编辑  收藏  举报