Shell脚本应用(一)

  • A+
所属分类:linux技术
shell脚本执行方式:
Linux中shell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行。
首先,看下我们的脚本内容
[tan@tan scripts]$ ll
total 4
-rw-rw-r--. 1 tan tan 68 May  8 23:18 test.sh
[tan@tan scripts]$ cat test.sh
#!/usr/bin/bash

/usr/bin/python <<-EOF
print "Hello Shell"
        EOF

1、工作目录执行
工作目录执行,指的是执行脚本时,先进入到脚本所在的目录(此时,称为工作目录),然后使用 ./脚本方式执行
[tan@tan scripts]$ ./test.sh
-bash: ./test.sh: Permission denied
[tan@tan scripts]$ chmod 764 test.sh
[tan@tan scripts]$ ./test.sh
Hello Shell
如图,报了权限错误,这里需要赋权,使用chmod 764 test.sh 赋权后就可以正常执行了
./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录 (/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。
2、绝对路径执行
绝对路径中执行,指的是直接从根目录/到脚本目录的绝对路径
[tan@tan scripts]$ pwd
/home/tan/scripts
[tan@tan scripts]$ `pwd`/test.sh
Hello Shell
[tan@tan scripts]$ /home/tan/scripts/test.sh
Hello Shell
这里 `pwd` 指的是该命令执行结果,等同于 /home/tan/scripts
3、sh执行
sh执行,指的是用脚本对应的sh或bash来接着脚本执行
[tan@tan scripts]$ sh test.sh
Hello Shell
[tan@tan scripts]$ bash test.sh
Hello Shell
注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三 是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用 指定bash路径自然也好理解了啊,呵呵……。
4、shell环境执行
shell环境执行,指的是在当前的shell环境中执行,可以使用 . 接脚本 或 source 接脚本
[tan@tan scripts]$ . test.sh
Hello Shell
[tan@tan scripts]$ source test.sh
Hello Shell
 
注释:“./”、sh、bash是相同的执行方式,“.”和source是相同的
source和“.”执行脚本时,将脚本中语句在本shell中执行,
sh、bash和./是在执行脚本时先启动一个新的shell,然后让脚本中的语句在新的shell中执行,执行完后就退出。
 
二:重定向与管道操作
1、重定向
    程序 = 指令(命令) + 数据(变量)
    在程序中,数据如何输入和输出
   1) 数据输入:键盘 -- 标准输入,但是不是唯一输入方式
        echo "123456" | passwd --stdin "username"      //输入密码
        ./useradd.sh< user.txt        //把user.txt中文件重定向到useradd.sh中
   2) 数据输出:显示器--标准输出,但是不是惟一的输出方式。
        ls /etc/ > a.txt
        fd文件标识符0-9:相当于给文件分类
       0:标准输出
       1:标准输入
       2:错误输入输出
常见重定向符号:
  1)标准输出
    >       覆盖重定向
    set -C  关闭覆盖重定向的功能   set +C:恢复
    >|    强制重定向    
    >>      追加重定向
  2)标准输入
    <     a<b   :把b交给a执行
    << 追加输入
  3)错误输出
    2>  2>>
    扩展:不需要输出内容,只需要输出状态;
    echo $?  :判断上一条命令是否正确(0正确,1-255其他都不正确)
2、管道符 ( | )
|  前一个命令的执行结果交给后一个命令来执行
二、Shell变量
使用shell变量
shell变量不区分类型,如果要指定变量类型也可用declare定义。
环境变量
1)所有环境变量都是系统全局变量,可以用于所有子进程中。
2)环境变量用export导出,但如果不写入指定配置文件(~/.bash_profile,~/.bash,/etc/bashrc,/etc/profile),退出命令行会丢失。
3)环境变量应使用大写。
显示环境变量:
set:输出所有变量,包括全局变量、局部变量。
env:显示环境变量。
declare:所有变量,函数,整数等。
set -o:所有参数配置信息。
unset消除本地变量和环境变量:
unset JAVA_

1.通过系统用户登录时的流程:

Shell脚本应用(一)
2.非登录Shell
 只会加载~/.bashrc或者/etc/bashrc
 普通变量
定义本地变量
1 var_name1=12345                           #为连续内容无需解析其他变量时可不用引号
2 var_name2=‘Do you have time.‘             #用单引号,原样输出
3 var_name3="No, I‘m working."              #会对其中变量进行解析,其他同单引号
4 var_name4=`ls -alh`                       #获取命令结果
5 var_name5=$(ls -l)                        #同上
特殊位置参数变量
常用特殊位置参数说明:

 
 
进程中的特殊状态变量:

Shell脚本应用(一)

 
进程中的特殊状态变量:

Shell脚本应用(一)
 
 
用法:
1)判断命令、脚本和函数是否执行成功
2)执行" exit 数字 " ,会返回数字给$?
3)在函数中" return 数字 ",效果同上
bash shell系统内置变量命令:
1)echo:在屏幕上输出变量  命令格式 echo args  其中arges可以是变量和字符串组合
2)eval: 
命令格式:eval args
功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令。
3)exec:
命令格式: exec 命令参数
功能:在不创建新的子进程前提下,转去执行指定的命令,指定命令执行完毕后,终结该进程。
4)read:
命令格式: read  [参数] [变量名](该变量不能为特殊变量)
功能:从标准输入读取字符串等信息,传给shell内部定义的变量。
1 read -t 10 -p ‘Pls input the num: ‘ num
5)shilft:
命令格式:shilft—Shilft positional parameters
功能:在程序中每使用一次shilft语句,都会使所有位置参数向左移动一个位置。
6)exit:
退出shell,可选定一个数字作为返回值。
 五)变量子串
 

Shell脚本应用(一)
Shell脚本应用(一)
 
 
六)特殊扩展变量

 
Shell脚本应用(一)
 
 
三、变量的数值计算
一)算术运算符
**:幂运算       其他略
二)算术运算命令

 
Shell脚本应用(一)
Shell脚本应用(一)
 
 
变量名称的规范
变量名不能用数字开头
变量名中不能有小数点
变量名不能用纯数字
变量名可以是字母开头再加数字
变量名中不能有斜杠“/”、“$”、“#”、“@”等特殊符号