Linux中的Shell

shell是一个用C语言编写的程序,它被称为用户使用linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。

Shell 脚本(shell script),是一种为shell编写的脚本程序。不能进行分布式的计算

helloword实例

#vi/home/shell/first.sh

#!bin/bash

echo "helloword"

#!/bin/bash是一种约定的标记,它告诉系统该脚本用什么解释器,即是哪一类脚本

除了第一行的#不是注释外 都是表示注释

###
linux中的时间:
正号: 以后  负号:以前
`date -d '-x hours' +"%Y-%m-%d %H:%M:%S"`
date -d "-x days" +%Y-%m-%d
date -d "-x weeks" +%Y-%m-%d
date -d "-x months" +%Y-%m-%d
date -d "-x years" +%Y-%m-%d

2. 运行方式

a.可执行权限运行

chmod a+x filename  #使脚本具有执行的权限

filename      #执行脚本

b.加解释器运行

/bin/bash /home/shell/filename

不用赋予脚本执行权限也不用脚本第一行加#!bin/bash  ,加了也是外面的生效

sh fielname   不需要授予执行权限

3.shell变量

首字母必须是字母或下划线,中间不能有空格标点符号(下划线除外)以及bash里的关键字
变量赋值:
name="name" 显式直接赋值
name='expr 2 + 2' 表达式计算结果赋值  注意+号左右都有空格
变量取值
$name   ${name}
只读变量
readonly name
删除变量
unset name
变量类型 
局部变量: 在脚本或者命令中定义,仅在当前的shell中有效
环境变量:所有程序都能访问
shell变量:shell程序设定的特殊的便利,可以是局部变量也可以是环境变量
字符串
可以用双引号也可以用单引号也可以不用引号
单引号:原样输出,单引号内不能出现单引号
双引号:内部可以使用变量,也可以用转义符
字符串长度:${#string}
提取子字符串:${string:a:b}  从第a个开始截取b个字符
查找子字符串:`expr index "$string" is` 查找字符 "i s" 的位置,输出的是第一次出现i的位置
数组
shell仅支持一维数组  
定义:
     数组名=(值1 值2... 值n)
     或者   数组名=(
值1
         值2
     .
  .
    .
值n
     )
     或者 数组名[i]=值i
读取数组:${数组名[下标]} @和*可以获取所有元素  无数组下标越界异常
获取数组长度:${#数组名[@或*]}
获取单个元素的长度 ${#数组名[n]}

4.shell注释

以#开头表示注释  第一行除外  没有多行注释   非要多行注释可以使用函数包起来

5.shell基本运算符

expr是一款表达式计算工具,使用它能完成表达式的求值操作
注意当用中括号[[]]包含时可使用< > <= >= && ||等运算符
算术运算符 + - * / % == !=    
  注意: 运算符前后都要加空格
       乘法要使用转义符\
       前面要加expr
       整体要用反引号包括
         条件表达式要放在方括号[]里面并且要有空格
关系运算符 -eq 等于 -ne 不等 -lt 小于 -gt大于 -le 小于等于 -ge大于等于
注意运算时要用[]包含
逻辑运算符 !非 -o 或  -a与
字符串运算符 =等于 !=不等于 
     -z 字符串长度为0 返回true
     -n 字符串长度不为0 返回true
     str 字符串不为空 返回true
文件测试运算符 
-d fiel 是目录为true
-f file 是文件为true
-r file 是否可读
-w file 是否可写
-x file 是否可执行
-s file 是否为空 不为空返回true
-e file 是否已存在

6.条件控制

单一的if:(表达式前必须有空格)
if [] 
then
cmd1
fi
单一的if else (else后不能有then)
if []
then
cdm1
else
cmd2
fi
if else-if else (elif后必须有then)
if []
then
cdm1
elif []
then
cdm2
else
cmd2
fi
循环 do while until case 支持continue 和 break
for i in 。。。。
do 
cmd1
cmd、、
done

while () 表达式用双括号
do
   cmd
done


until
case 值 in
模式1)
      cmd1
      ...
模式2)
       cmd2.。。
esac

7.方法

格式:
[function] funname(){
方法体
[return]
}

注:可以带function fun()定义,也可以直接fun()
    参数返回,可以显示加:return 返回,如果不加将以最后一条命令运行结果返回
return后面跟数值n (0-255)
    调用时直接写函数名字不需要()
    有参方法调用时可以直接把参数放到函数名后面
    需要输入是 用read 变量名  的方法等待输入
    函数返回至 直接用 $? 接收
    $# 表示传递到脚本的参数个数

8.文件引入

和其他语言一样,shell也可以把汗外部脚本,这样可以方便封装公用的代码作为一个独立的文件
shell语言包含的语法格式如下
. filename  中间有空格
source filename 

9.shell简单调试

sh -n file 语法检测
sh -x file 普通调试
中断调试:
在调试过程中按 Ctrl+z中断调试,观察结果,按f+g键继续调试
可以sleep n  方法是程序睡眠
使用调试工具bashdb  可以设置断点 单步执行 变量观察等很多功能

bashdb -c script.sh

bashdb script.sh

bashdb --debugger script.sh 调试命令:

【常用命令】

l             列出当前行上下各5行,总共10

q|quit        退出

h             帮助

/for/         向后搜索字符串for

?for?         向前搜索字符串for

x 1+2         计算算术表达式的值

!! ls -laRt   执行shell命令

n             执行下一条语句

s 4           单步执行4次,如遇到函数则进入函数里面

b 4           在行号4处设置断点

del 4         删除行号为4的断点

c 10          一直执行到行号10处   

R|run         重新执行当前调试脚本

finish        执行到程序最后


9.其他

linux 时间---------------------

将当前时间格式化:

date +"%Y%m%d"  或者 date +"%Y-%m-%d"

获取当天前后日期:(x为正数即是向前,负数则是向后)

date -d "x days ago" +%Y%m%d

date -d "x weeks ago" +%Y%m%d

date -d "x months ago" +%Y%m%d

date -d "x years ago" +%Y%m%d

crontab -e  定时任务列表编辑

*-------*---------*-------*-----------*

              

配置普通用户sudoers

Sudo 使用root权限操作文件

1. 配置文件

该权限

Visudo -f /etc/sudoes

Tom   All=ALLAll






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值