初识shell
Posted cp-linux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识shell相关的知识,希望对你有一定的参考价值。
1、解释器
1.1 shell认识
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell是解释器的总称,bash只是其中的一种 ;shell编程 bash脚本
[root@server0 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh /bin/ksh
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
1.2 更改使用某一个解释器
usermod -s
useradd -s /user/bi/bin/sh
/bin/kshn/ksh nb
su - nb
2、重定向
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
重定向输入 < 将文本输入来源由键盘改为指定文件
重定向输出 > 将命令行的正常执行输出保存到文件,而不是显示在屏幕
重定向输出 >> 追加
重定向错误 2>
重定向错误 2>>追加
混合重定向 &> 无论错误正确都覆盖到一个文件中
2>&1 意思是把 标准错误输出 重定向到 标准输出
[root@server0 ~]# ls /etc/hosts nofile >log1 2>log2 #将一个存在的文件和不存在的文件 正确的导入log1,错误的导入log2
收发邮件的两种方法
echo hello | mail -s hello root
mail -s hello root < mail.txt //需要具备一个文件
3、变量
3.1 变量赋值
[root@desktop0 ~]# a=11 等号两侧没有空格 [root@desktop0 ~]# b=22 引用变量$a $b [root@desktop0 ~]# echo $ab #查看变量 输出11b [root@desktop0 ~]# echo ${a}${b} #注意括号 输出1122
3.2 取消变量:unset
3.3 存储类型变量:整数型,浮点型。。。
3.4 使用类型:环境变量,位置变量,预定义变量,自定义
3.5 环境变量 配置文件/etc/profile ~/.bash_profile
常见的环境变量:PWD、PATH、USER、LOGNAME、UID、SHELL、HOME、PS1、PS2
PS1=XX#
env //查看当前系统的所有变量
set //列出所有变量
3.6 预定义变量
$0 //当前所在进程或脚本名
$* //所有位置变量的值
$# //已加载的位置变量的个数
$? //上一条命令的输出状态,0表示正常,1或其他表示异常
$! //后台运行的最后一个进程
3.7 位置变量 在执行脚本时提供的命令行参数
$1 //第一个变量
$2 //第二个变量
3.8 脚本的执行方式
当没有加x权限的情况
sh 脚本文件路径
source 脚本文件路径
. 脚本文件路径
3.9 双引、单引和反引
双引:使用双引号可以界定一个完整的字符串
touch a b //创建两个文件
touch “a b” //创建一个文件
单引:一个完整的字符串,并且屏蔽特殊符号
a=11
echo “$a” //输出a的值
echo ‘$a’ //输出$a
echo “ab” == echo ‘ab’
echo “$a” != echo ‘$a’
反引:` ` 和$效果一样
将命令的执行输出作为变量值
[root@desktop0 ~]# echo $(ls) #注意括号
1.sh anaconda-ks.cfg
[root@desktop0 ~]# echo `ls`
1.sh anaconda-ks.cfg
案例:每周五备份/etc/log
0 4 * * 5 tar -zcf /root/log.tar.gz /etc/log //这样容易造成每周五将原有的数据覆盖
0 4 * * 5 tar -zcf /root/log.`date +%F`.tar.gz /etc/log //这样就起到了每周五不会覆盖原有的数据
3.10 read 标准输入取值
格式:read [-p 提示信息] 变量名
3.11 stty -echo //关闭回显
stty echo //恢复
局部变量 a=11
全局变量 export a=11
4、expect预期交互
expect可以为交互式过程(比如FTP、SSH等登录过程)自动输送预先准备的文本或指令,而无需人工干预。触发的依据是预期会出现的特征提示文本。
yum -y install expect
#!/bin/bash ip=176.19.1.65 expect << EOF (开头结尾保持一致) spawn ssh root@$ip //spawn对屏幕监控 expect "password" {send "Taren1 "} //当屏幕出现password发送密码 expect "#" {send "touch /root/a.txt "} expect "#" {send "exit "} EOF
以上是关于初识shell的主要内容,如果未能解决你的问题,请参考以下文章