shell编程(一)

什么是shell

 shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。
 shell是命令解析器,用户输入命令,它去解析。
 shell类型 ash、bash、ksh、csh、tcsh
 cat /etc/shells 看系统下的shell
 echo $SHELL 看当前用户运行的shell
 程序在shell中运行
 ls命令执行过程分析
 shell中可以运行子shell
 /bin/csh 退出子shell
 linux下默认的shell是bash
 bash特点,快速(上下键);tab键盘自动补齐;自动帮助功能help

存取权限与安全

简介: 文件和目录的权限(-rwxr—r–)
setuid(suid/guid) (chmod u+s g+s file)
chown和chgrp(chown user file/chgrp group file)
umask (umask nnn) (文件创建时的缺省权限位)
 文件和目录的权限(-rwxr–r–)

ls –lh

d-目录 –一般文件 –l快捷方式 –c字符设备 –b块设备 s-socket设备文件 –p管道文件

drwxr-xr-x 2 test test   4096 Jun 23 08:07 cppsocket1
drwxr-xr-x 8 test test   4096 Jun 23 08:08 cppsocket2
drwxr-xr-x 9 test test   4096 Jun 18 12:32 gcc
-rw-r--r-- 1 test test  59827 Jun 23 08:11 gcc_mk_gdb.tar.gz

 chmod 改变文件或目录的权限位

Linux文件的三种身份和四种权限,三种身份分别为:
u:文件的拥有者
g:文件所属的群组
o:其他用户
对于每个身份,又有四种权限,分别为:

r:读取文件的权限(read)
w:写入文件的权限(write)
x:执行的权限(execute)
s:特殊权限

1.chmod以数字形式改变文件权限

chmod 755 test.sh
将755换算成字符形式,为rwxr-xr-x

2.chmod以字符形式改变文件权限

chmod +x test.sh
这里写图片描述

 setuid(suid/guid)(chmod u+s, g+s file)

 chown和chgrp(chown use file/chgrp group file)
chown改变文件、目录所在的用户和用户组
chgrp改变文件、目录所在的用户和用户组
chown [-R] owner myfile
chown owner.group myfile
chown .group myfile //注意有个点
chgrp [-R] group myfile

扫描二维码关注公众号,回复: 933644 查看本文章

权限掩码umask

umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读和执行权限)

umask的作用
默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2),可以用ls -l验证一下哦 现在应该知道umask的用途了吧,它是为了控制默认权限,不要使默认的文件和目录具有全权而设的

修改umask值
知道了umask的作用后,你可以修改umask的值了,例如:umask 024则以后建立的文件和目录的默认权限就为642,753了

将umask值保存到环境文件
若要长期修改umask的值,可以把它写进/etc/profile或~/.profile或~/.bash_profile中,大家应该知道这几个文件是干什么用的吧。
 umask — 文件 — 目录
 0 —— 6 —— 7
 1 —— 5 —— 6
 2 —— 4 —— 5
 3 —— 3 —— 4
 4 —— 2 —— 3
 5 —— 1 —— 2
 6 —— 0 —— 1
 7 —— 0 —— 0

 ls –lda 命令只查看目录
 umask的配置

 /etc/profile($HOME/.profile $HONME/.bash_profile)

软硬连接

 文件的符合链接(ln [-s] source_path target_path)
 硬连接
 软连接
硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用.

软链接:也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件.

下面详细介绍一下硬链接和软连接之间的区别.

1.硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。(ls -l 结果的第二列是文件的硬连接数,即inode节点的链接数)

2.若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。

3.由于符号链接的特性,导致其可以跨越磁盘分区,但硬链接不具备这个特性.

4.不能对目录创建硬链接,但可以创建软链接

shell脚本

 使用shell脚本的原因
 功能强大
 节约时间
 shell脚本基本元素

#!/bin/bash

#shell脚本
mytext="hello world"
echo $mytext;

注意初学者易犯错误:
1) 第一行#不是注释 其他#都是注释;
2) echo $mytextA;写错现象;
3) 写错现象#!bin/bash
4) 脚本如果没有执行权限 chmod 111 01hello.sh,如何办
5) chmod u+x 01hello.sh chmod u-x 01hello.sh

shell脚本运行方式
./01shell.sh $PATH

shell特性

一、 alias 别名

. 查看本用户下的alias配置

[test@localhost ~]$ alias 
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[test@localhost ~]$

 自定义别名: alias ll = ‘ls -alh’
 alias ll = ‘ls –I –color=tty’
 cat $HOME/.bashrc 在这个用户下配置着alias命名的配置

二、命令替换

   ls `cat myfile` –alh 

通过单反引号,把’cat myfile’的内容输出 传给ls命名
 注意反单引号,在键盘的~符号的下方。也就是在键盘左上角 ESC键的下边

三、后台处理

什么是后台nohup commond &
 一个终端可以同时运行多个程序
 nohup tar –cvf 111.tar.gz & 可以同时运行多个大文件压缩
 jobs –l 可以查看后台正在运行的命令

四、管道

 把一个命令的输出作为另外一个命令的输入
 ls -l| sort; ls | sort

五、重定向

< 输入 >输出
 与管道相关,可以改变程序运行的输入来源和输出地点

sort< myfile.txt 
sort<myfile.txt >myfile+sort.txt

六、模式匹配

假设一个字符串如下:

str=”aa.bb.cc.bb.ee.bin”

  1. 去头,从开头去除最短匹配前缀: echo ${str#*.} #bb.cc.bb.ee.bin

  2. 去头,从开头去除最长匹配前缀: echo ${str##*.} #bin

  3. 去尾,从结尾去除最短匹配后缀: echo ${str%.*} #aa.bb.cc.bb.ee

  4. 去尾,从结尾去除最长匹配后缀: echo ${str%%.*} #aa

  5. 删除第一个与”bb”匹配的字符串: echo ${str/bb} #aa..cc.bb.ee.bin

  6. 删除所有与”bb”匹配的字符串: echo ${str//bb} #aa..cc..ee.bin

  7. 将第一个”bb”替换成”gg”: echo ${str/bb/gg} #aa.gg.cc.bb.ee.bin

  8. 将所有的”bb”替换成”gg”: echo ${str//bb/gg} #aa.gg.cc.gg.ee.bin

假设一个字符串如下:

str=”aa bb cc bb ee bin”

将str以空格分割:取得第1部分:

取得第1部分:echo $str | awk '{print $1}'      #aa
取得第2部分:echo $str | awk '{print $2}'      #bb
取得第6部分:echo $str | awk '{print $6}'      #bin

七、特殊字符

 双引号(“”):用来使shell无法认出空格、制表符和其他大多数特殊字符,比如:建立一个带空格的文件touch “wang bao ming”。
 单引号(‘):用来使shell无法认出所有特殊字符。
 反引号(`):用来替换命令
 反斜杠():用来使shell无法认出的特殊字符,使其后的字符失去了特殊的含义,转义字符。eg:创建带空格文件名 touch my\ file
 分号(;):允许在一行上放多个命令。mv 1.txt 2.txt; mv 2.txt 3.txt;
 &:命令后台执行
 括号():创建成组的命令
 大括号{}:创建命令块。
 竖杠(|):管道标示符
 < > &:重定向表示符
 * ? [ ] !:表示模式匹配
 $:变量名的开头
 #:表示注释(第一行除外)
 空格、制表符、换行符:当做空白

猜你喜欢

转载自blog.csdn.net/coolwriter/article/details/80226355
今日推荐