shell脚本基础1 概述及变量
shell概述:
在linux内核与用户之间的解释器程序
通常指/bin/bash
负责指向内核翻译及传达用户/程序指令
相当于操作系统的“外壳”
shell的使用方式:
交互式——命令行:人工干预,智能化程度高,逐条解释执行,效率低
非交互式——脚本:需要提前设计,智能化难度大,批量执行,效率高,方便在后台静悄悄的运行
切换shell环境:
通过usermod ,chsh更改登陆shell
手动执行目标shell程序
[root@ceshiji ~]# cat /etc/shells
/bin/sh (多数unix默认的shell)
/bin/bash (多数linux默认使用的shell)
/sbin/nologin (非登陆shell)
/bin/dash
/bin/tcsh
/bin/csh
/bin/ksh
bash基本特性:
命令行环境回顾
快捷键,tab键补齐
命令历史
命令别名
标准输入输出
重定向
管道操作
/etc/profile (环境变量和启动程序)
/etc/bashrc (函数和别名)
/root/.bash_profile
/root/.bashrc
编写及执行脚本:
#!/bin/bash
for i in {1..10}
do
useradd hydra$i 2>>uerror.log >/dev/null
echo "123" |passwd --stdin user$i 2>>perror.log >/dev/null
done
添加执行权限:
[root@ceshiji ~]# chmod +x x.sh
[root@ceshiji ~]# ./x.sh
hail hydra!!!!!
没授权时执行:(因为解释器权有权限)
[root@ceshiji ~]# chmod -x x.sh
[root@ceshiji ~]# bash x.sh
[root@ceshiji ~]# sh x.sh
(以上两个开子进程)
[root@ceshiji ~]# source x.sh
[root@ceshiji ~]# . x.sh
(以上两个不开子进程)
脚本规范思路:
#!脚本声明(使用哪种解释器)
#注释信息(步骤,思路,用途,变量含义等)
可执行的语句
脚本创建:
新建文本文件
添加可执行的脚本语句(命令行)
添加x权限
[root@ceshiji ~]# vim x.sh (创建文件)
#!/bin/bash (声明解释器)
#步骤,思路,用途,变量含义
echo "hail hydra!!!!!" (写脚本语句)
[root@ceshiji ~]# chmod +x x.sh (添加执行权限)
[root@ceshiji ~]# ./x.sh
hail hydra!!!!!
——————————————————————————————
shell变量是弱类型的变量
变量:
变量名称=值
变量名称:字母,数字,_,但不能以数字开始
定义/赋值变量
变量名=变量值
[root@ceshiji ~]# x=12 定义变量x,赋值12
[root@ceshiji ~]# var1=redhat 定义变量var1,赋值redhat
相关注意事项:
若指定的变量名已存在,相当于为此变量名重新赋值,
等号两边不要有空格
变量名由字母/数字/下划线组成,区分大小写
变量名不能以数字开头,不要使用关键字和特殊字符
防止冲突可以用花括号(区分大小写)
$变量名
${变量名}
[root@ceshiji ~]# a=7
查看变量的值:
echo $变量的名称
[root@ceshiji ~]# echo $a
7
取消变量:
unset 变量的名称
[root@ceshiji ~]# unset a
[root@ceshiji ~]# vim b.sh
#!/bin/bash
useradd $1 (($1变量 $2变量)
echo "$2" |passwd --stdin $1
[root@ceshiji ~]# ./b.sh hydra Anonymous
更改用户 hydra 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
变量的作用范围
局部变量:
新定义的变量默认只在当前shell环境中有效
无法在子shell环境中使用
全局变量:
在当前shell及子shell环境中均有效
使用export可将局部变量申明为全局变量
变量的分类:
环境变量:变量名通常都是大小写,油系统维护,用来设置工作环境
位置变量:bash内置,存储执行脚本时提供的参数
预定义变量:bash内置,一类有特殊用途的变量,可直接调用,但不能直接赋值或修改
自定义变量:由用户自主设置,修改及使用
变量配置文件
/etc/profile ~/.bash_profile
相关操作
env:列出所有的环境变量
set:列出所有变量
常见的环境变量:
PWD PATH USER LOGNAME UID SHELL HOME PS1 PS2.... ....
预定义变量:
用来保存脚本程序的执行信息
直接使用这些变量,不能直接为这些变量赋值
变量名:
$0:当前所在的进程或脚本名
$$:当前运行进程的pid号
$?:命令执行后的返回状态,0正常,非0表示失败
$#:已加载的位置变量的个数
$*:所有位置变量的值
位置变量:
在执行脚本时提供命令行参数
表示为$n,n为序号
$1,$2,... ..${10},${11},...
[root@ceshiji ~]# vim c.sh
#!/bin/bash
echo $1 ${10} (查看第1,10个位置参数)
[root@ceshiji ~]# ./c.sh 1 2 3 4 5 6 7 8 9 10 11
1 10
实例:
快速添加用户,并设置好登陆密码
在执行脚本时,提供用户名作为参数
将登陆密码设为123456
[root@ceshiji ~]# vim x.sh
!/bin/bash
useradd $1 2> /tmp/err.log
echo 123456 | passwd --stdin $1 &> /dev/null
——————————————————————————————————————
扩展赋值操作
区分三种定界符
双引号"":允许扩展,以$引用其他变量
单引号'':禁用扩展,即便$也视为普通字符
反撇号``:放命令,执行命令,取出命令的结果
(双引号,单引号都是引整体,但是单引号屏蔽特殊符号)
[root@ceshiji run]# echo "$USER"
root
[root@ceshiji run]# echo '$USER'
$USER
[root@ceshiji run]# echo `date`.txt
2017年 07月 25日 星期二 07:04:09 CST.txt
用tar的形式备份/var/log,备份到/opt下
[root@ceshiji opt]# tar -czf log_`date +%Y%m%d`.tar.gz /var/log/
————————————————————————————————————
shell脚本基础1 概述及变量的更多相关文章
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- shell脚本-基础
shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- shell脚本实现监控shell脚本的执行流程及变量的值
这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...
- shell脚本基础知识以及变量
一.基础知识 1.shell脚本的格式注意事项 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)."#!/bin/bash" ...
- shell脚本—基础知识,变量
shell脚本本质: 编译型语言 解释型语言 shell编程基本过程 1.建立shell文件 2.赋予shell文件执行权限,使用chmod命令修改权限 3.执行shell文件 shell变量: sh ...
随机推荐
- 【转】CentOS 6.3(x86_64)下安装Oracle 10g R2
目 录 一.硬件要求二.软件三.系统安装注意四.安装Oracle前的系统准备工作五.安装Oracle,并进行相关设置六.升级Oracle到patchset 10.2.0.4七.使用rlwrap调用sq ...
- 搭建yum仓库与定制rpm包
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...
- chrome disable-web-security 关闭安全策略 解决跨域
Chrome 跨域访问线上接口 时间:2016-04-21 作者:zhongxia 前后端分离之后,联调的时候就会出现问题,那就是Ajax跨域问题. 跨域问题的解决方案有很多种比如常规的 后端使用CR ...
- python3操作socketserver
socketserver是标准库中的一个高级模块,用于网络客户端与服务器的实现.模块中,已经实现了一些可供使用的类. 在python3中,导入socketserver模块使用的命令: import s ...
- 安装memcache及php的memcached模块
下载链接: http://pan.baidu.com/s/1o6MA8lG http://pan.baidu.com/s/1qWO8tMs http://pan.baidu.com/s/1c0iZu1 ...
- Objective-C Runtime 文档翻译
前言 Objective-C语言尽可能多的将许多决定从编译连接推迟到运行时.无论何时,它都尽可能的动态处理事件.这就意味着OC语言不仅仅需要编译器,还需要一个运行时系统来执行编译完成的代码.对于O ...
- SSD写入放大问题[转]
原文地址:http://blog.csdn.net/cywosp/article/details/29812433 之前在SSD(Solid State Drive)上设计并实现缓存系统用于存储数据块 ...
- java中Queue简介
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 offer,add区别:一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝.这时新的 offer 方法 ...
- document.activeElement 过滤选择文件弹窗导致的页面失焦
在线考试页面,常常需要检测用户是否作弊. 一般是监听页面是否失焦的方式,而失焦的方式有很多种,比如QQ弹窗,切换页面,切换程序,input文件上传选择文件等 选择文件是正常情况,这种情况下需要过滤 本 ...
- 游戏2048源代码 - C语言控制台界面版
一.游戏介绍 <2048>是最近比较流行的一款数字游戏.原版2048首先在github上发布,原作者是Gabriele Cirulli.它是基于<1024>和<小3传奇& ...