shell 第一篇
1、 查看当前linux 支持的shell 类型
[root@nfs01 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
上面的前三个是常用的,bash比sh要更强,有些如果执行不起来,那么就用bash增强
shell脚本优势在于处理操作系统底层的业务,php是网页程序,是一款更注重于web网页开发的脚本语言
考试题一Centoslinux系统默认的shell是()
bash
查看方法1、
[root@nfs01 ~]# echo $SHELL
/bin/bash
查看方法2、
[root@nfs01 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
更改默认的shell
[root@nfs01 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
2、书写脚本方法如下:
l 脚本开头(第一行)指明解释器
#!/bin/bash
或
#!/bin/sh <==255个字符以内
注意bash的漏洞(破壳漏洞,注意升级)
下面是linux中常用脚本语言开头的编码写法:
#!/bin/sh
#!/bin/bash
#!/usr/bin/awk
#!/bin/sed
#!/usr/bin/tcl
#!/usr/bin/expect(sshpass,pssh)
#!/usr/bin/perl
#!/usr/bin/env python
如果脚本里面没有上面的解释器那么就用 类似 python test.txt等来执行
3、shell的执行方式
注意点,设置crond任务的时候,最好把系统环境变量在定时任务脚本重新定义,否则,一些系统环境变量将不被加载,这个问题要注意
shell脚本的执行通常采取下面几种方式
1) bash script-name或者sh script-name (推荐使用)
2) path /script-name或者./scripts-name #-->注意“.”点号 《===需要脚本有执行权限
3) source script-name 或者. script-name #-->注意“.”点号
4) sh <script-name 或者 cat script-name|sh(同样适合bash)
题:
1、 已知如下命令及返回结果,请问echo $user的返回结果为()
[root@nfs01 pyrene]# cat test.sh
user=`whoami`
[root@nfs01 pyrene]# sh test.sh
[root@nfs01 pyrene]# echo $user
本题答案为空。解释:
由于每个脚本的父shell是bash所以这里再用sh执行这里的执行之后就属于sh子shell了,然后bash这个父shell里面就没有,echo 子shell里面的东西,当然执行不了就为空
1)儿子shell会直接继承父亲shell的变量函数等,反之不可以
2)如果希望反过来继承,用source或者点号执行脚本
4、脚本书写习惯
1)脚本书写脚本解释器
2)脚本开头增加版权等信息
#date
#auther
#versipn
#founction
3)脚本不用中文
4)脚本以.sh为扩展名命名
5、shell变量
变量分为两类:环境变量(全局变量)和普通变量(局部变量)
环境变量又可以分为自定义环境变量和bash内置的环境变量
普通变量也可称为局部变量,只能在创建它们的shell函数或者shell脚本中使用,普通变量一般是由开发者用户创建的
2)su – 这里的-会把环境变量带过来
3)环境变量在命令行中创建,推出命令行的时候这些变量就会丢失,如果希望永久保存环境变量可以在家目录中设置.bash_profile或者.bashrc文件中
如果希望全局生效(所有用户都生效)/etc/bashrc 或者/etc/profile
4)传统上,所有环境变量名字格式都应该大写,自己定义的环境变量用exprot命令定义,如:export OLDGIRL=1
6、自定义环境变量
格式:
1) export 变量名=value
2) 变量名= value,export 变量名
3) declare -x 变量名 =value
[root@backup-41 ~]# export NAME=oldboy
[root@backup-41 ~]# env|grep NAME
HOSTNAME=backup-41
NAME=oldboy
LOGNAME=root
G_BROKEN_FILENAMES=1
当然上面的是不是永久生效的,如果想永久生效需要放入.bash_profile 或者.bashrc中,如果想要全局生效需要放入/etc/profile中
自定义环境变量生产环境java环境配置实例:tomcat,resin,csvn,hadoop
export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN_HOME=/application/resin
常放在/etc/profile
如果写一个JAVA脚本,好要把上述的java环境配置放入脚本内重新定义,特别是执行定时任务的时候
7、环境变量的显示与取消
1)通过echo或者printf命令输出变量
$HOME 用户登录时进入的目录
$UID 当前用户的UID(用户标识)
$PWD 当前工作目录的绝对路径名
$SHELL 当前shell
$USER 当前用户
2)可以用env来显示环境变量
3)unset取消本地环境变量
环境变量小节:
1) 变量名通常大些
2) 可以在自身的shell以及子shell中使用
3) 通过export来定义环境变量
4) 输出用$变量名,取消用unset变量名
5) 书写定时任务要注意环境变量,最好在脚本中重新定义
6) 如果希望永久生效放在用户环境变量文件或者全局环境变量文件里
8、普通变量的定义
1)普通变量定义
变量名=value
变量名=‘value’
变量名=“value”
2)变量名一般由字母,数字,下划线组成,可以字母或者下划线开头
3)把一个命令的结果作为变量的定义方法
变量名= `ls` 这里是反引号
变量名=$(ls)
[root@backup-41 ~]# CMD=$(pwd)
[root@backup-41 ~]# echo $CMD
/root
如按天打包文件
tar -zcvf etc_$(date +%F).tar.gz /etc/
普通变量定义小节:
1) 连续的数字或者字符串可以不加引号
2) 变量内容很多,还虚妄解析变量,加双引号
3) 希望原样输出就用单引号
4) 希望变量内容是命令结果的定义:反引号 如a=`ls`或者$()如a=$(ls)
变量的输出
1) 在变量名前面加上$可以取得此变量的值,使用echo或者printf命令可以显示变量的值,$A和${A}的写法不同但是功能是一样的
2) echo输出的时候也有单引号双引号、反引号的形式,用法和前面的总结一致
3) ${WEEK}day如果变量后面有其他字符连接的时候,必须给变量加上大括号{}
4) 要养成将所有字符串变量用双引号括起来的习惯,将会减少很多编程时遇到的问题
习题:下面的会输出什么样的记过
[root@backup-41 ~]# a=192.168
[root@backup-41 ~]# b="192.168"
[root@backup-41 ~]# b="192.168"
[root@backup-41 ~]# c="192.168"
[root@backup-41 ~]# echo "a=$a"
a=192.168
[root@backup-41 ~]# echo "b=$b"
b=192.168
[root@backup-41 ~]# echo "c=$c"
c=192.168
1)$变量名表示输出变量,可以用$c和${c}两种用法
环境变量小结
1) 一个等号是赋值,两个等号是比较
2) 打印变量,变量名前接上$符号,变量名后面接着字符的时候要用大括号将变量单独括起来
3) 打印输出或者变量时,一般用双引号或者不加引号,如果是字符串变量最好加上双引号,如果原样输出,用单引号
4) 希望变量的内容是执行命令,要用反引号或者$()把变量括起来
9、shll 的特殊重要变量
1)位置参数
$0获取当前执行脚的shell脚本文件名,如果执行脚本带路径那么就包括脚本路径
$n 获取当前执行的shell脚本的第n个参数值,如果n=1..9,但n为0的时候表示脚本的文件名,如果n大于9,用大括号括起来${10},参数以空格隔开
$#获取当前执行的shell 脚本后面接的参数的总个数
dirname 直接取脚本路径
basename 直接取脚本名字
案例2、/etc/init.d/rpcbind start
上述脚本中的start参数会传给脚本里的$1进行判断
case “$1” in
start>
start
案例三
在n.sh中写入echo $0然后执行下面的
[root@nfs01 scripts]# sh n.sh oldboy
n.sh
案例四
在t.sh中写入判断
#!/bin/sh
if [ $# -ne 2 ]
then
echo "USAGE $0 arg1 arg2"
exit 1
fi
echo $1 $2
[root@backup-41 scripts]# sh t.sh aa
USAGE t.sh arg1 arg2
[root@backup-41 scripts]# sh t.sh aa bb
aa bb
2)进程状态变量
$$ 获取当前shell 脚本的进程号(PID)
$! 执行上一次指令的PID
$? 获取执行上一个指令的返回值(0为成功,非零为失败) #这个变量很常用
shell 第一篇的更多相关文章
- shell第一篇
前两天不停的再看内核相关的内容,了解内核的形成.内核的执行流程.内核的作用,结果是舍近求远. 其实我只是想了解一下shell的工作,shell与内核有关,但并不需要我么真正去做什么,至少对于我这样额初 ...
- Shell第一篇:BASH 环境
一 什么是SHELL shell一般代表两个层面的意思,一个是命令解释器,比如BASH,另外一个就是shell脚本.本节我们站在命令解释器的角度来阐述shell 命令解释器SHELL的发展历史,SH- ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
- 第一篇 入门必备 (Android学习笔记)
第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具 ●Android之父 Android安迪·罗 ...
- Python编程笔记(第一篇)Python基础语法
一.python介绍 1.编程语言排行榜 TIOBE榜 TIOBE编程语言排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网有经验的程序员.课程和第三方厂商的数量. 2.pytho ...
- ETL第一篇(Kettle Spoon) 初遇
ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 简介 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移 ...
- 第一篇:Django基础
Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...
- [转帖]虚拟内存探究 -- 第一篇:C strings & /proc
虚拟内存探究 -- 第一篇:C strings & /proc http://blog.coderhuo.tech/2017/10/12/Virtual_Memory_C_strings_pr ...
- 第一篇:解析Linux是什么?能干什么?它的应用领域!
不得不说的前言(不看完睡觉会尿床):饿货们~!你说你们上学都学了点啥?这不懂那也不懂,快毕业了啥也不会.专业课程不学好毕业了也找不到好工作.爸妈给你养大,投资了多少钱.你毕业后随便找了个什么鸡毛工作开 ...
随机推荐
- CSS清除默认边距
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquo ...
- Ubuntu 18.04/18.10快速开启Google BBR的方法
说明:Ubuntu 18.04改变挺大的,内核直接升到了正式版4.15,而BBR内核要求为4.9,也就是说满足了,所以我们不需要换内核就可以很快的开启BBR,这里简单说下方法. 提示:Ubuntu 1 ...
- java笔试之参数解析(正则匹配)
在命令行输入如下命令: xcopy /s c:\ d:\, 各个参数如下: 参数1:命令字xcopy 参数2:字符串/s 参数3:字符串c:\ 参数4: 字符串d:\ 请编写一个参数解析程序,实现将命 ...
- CodeForces 258D Little Elephant and Broken Sorting(期望)
CF258D Little Elephant and Broken Sorting 题意 题意翻译 有一个\(1\sim n\)的排列,会进行\(m\)次操作,操作为交换\(a,b\).每次操作都有\ ...
- 以代码的方式管理quartz定时任务的暂停、重启、删除、添加等
[前言]在项目的管理功能中,对定时任务的管理有时会很常见.因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢? ...
- HDU 3923 Invoker | 暑训Day1 C题填坑
暑训第一天,专题为组合数学与概率期望. 最近一个月都没有学习新的知识,上午听聚聚讲课头脑都是一片空白.加上长期没刷题,下午做练习题毫无感觉.到晚上总算理清了蓝书上的一些概念,跟着榜单做题.最后唯独剩下 ...
- PAT甲级——A1077 Kuchiguse
The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...
- js中读取json数据
1.JSON字符串转为JSON对象 var obj = eval('('+data+')');① var obj = data.praseJSON();② var obj = JSON.prase(d ...
- axis2开发webservice接口入门到精通详解(转)
最近在开发接口,在网上发现了两篇不错的文章,给大家分享下: 第一篇: 一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: ...
- 05_Spring AOP原理
理解AOP相关概念 Target(目标对象):代理的目标对象 Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. ...