Linux操作掌握shell基础
shell支持具有字符串值的变量。shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值。在命令行或shell脚本文件中使用$name的形式引用变量name的值。
在shell中,变量的赋值格式如下:name=String
变量名是以字母或下画线开头的字母、数字和下画线字符序列组成的。
通过在变量名(name)前加 $ 字符(如$name)引用变量的值,引用的结果就是用字符串string代替 $name,此过程也称为变量替换。
在定义变量时,若string中包含空格,则string必须用引号将其括起来,单双引号均可。
双引号内允许变量替换,而单引号内则不可以。
shell变量分为局部变量和全局变量。
局部变量的作用范围仅限制在其命令行所在的shell或shell脚本文件中。
全局变量的作用范围则包括本shell进程及其所有子进程。
可以使用export内置命令将局部变量设置为全局变量。
环境变量是指由shell定义和赋初值的shell变量。shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。所有环境变量都是全局变量,并可以由用户重新设置。在bash中,设置环境变量与普通变量设置方法相同,命令的格式是:
环境变量=变量的值

(1)cmd ; cmd(不考虑命令相关性的连续命令执行)。
(2)$?(命令回传值)与“&&”或“||”。

由于命令是一个接着一个运行的,因此,如果真要使用判断,那么 && 与 || 的顺序就不能搞错。
正则表示法是处理字符串的方法,它以“行”为单位来进行字符串的处理。正则表示法透过一些特殊符号的辅助,可以让使用者轻易达到查找/删除/替换某些特定字符串的工作。正则表达式通常与grep命令搭配使用。
grep '查找字符串' filename
使用重定向
重定向就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向。通常情况下,重定向到一个文件。

当我们输入重定向符时,命令解释程序会检查目标文件是否存在。如果不存在,命令解释程序将会根据给定的文件名创建一个空文件;如果文件已经存在,命令解释程序则会清除其内容并准备写入命令的输出到结果。这种操作方式表明:当重定向到一个已存在的文件时需要十分小心,数据很容易在用户还没有意识到之前就丢失了。
在Linux中若前一个命令运行的结果正确,则在Linux中会回传一个 $? = 0的值。那么我们需要通过这个回传值来判断后续的命令是否要运行。这要用到“&&”及“||”,如下表所示。
任务1:身为系统管理员,为简化每日重复工作,请对root用户环境配置文件内PATH进行修改,使得“自制命令”可在全局使用。要求:自制命令文件名称为mytask,存放位置为/root/mybin,文件完成以下步骤配置,①进入root用户家目录②创建log文件③在log文件内追加写入信息④将log文件内信息输出显示。
①在root用户主目录下,创建mybin文件夹,在该文件夹下创建mytask文件
[root@30client2 ~]# mkdir mybin //在root下创建mybin文件夹
[root@30client2 ~]# cd mybin //进入mybin目录
②利用vim编辑器,对mytask文件进行编辑,写入对应指令
[root@30client2 mybin]# vim mytask //在mybin目录中创建文件并编写代码
cd /root
touch log
echo "my
name is siyang">>log
cat log
[root@30client2 mybin]# chmod 777
mytask //设置mytask文件的权限使其能够读取、写入和执行
③对root用户环境配置文件.bash_profile进行修改,配置PATH
[root@30client2 mybin]# cd
[root@30client2 ~]# vim .bash_profile//对.bash_profile进行修改,使得可在全局使用。
PATH=$PATH:$HOME/bin:/root/mybin
④重新加载配置文件
[root@30client2 ~]# source .bash_profile
[root@30client2 ~]# mytask
my name is
siyang
任务2:将one.txt、two.txt文件利用scp命令从windos传输到linux上,使用grep命令找出one文件中包含the字符的行,使用grep+正则找出one文件中t[a-z]e的行、找出one文件中The开头的行,找出two文件中g开头d结尾且包含3个连续字母o的行,找出two文件中包含至少2个连续字母o的行。
2、使用grep、正则表达式完成实验内容
准备工作:
将one.txt、two.txt文件放在windows桌面上,开启windows命令行,利用cd Desktop命令切换至桌面,使用scp one.txt two.txt
root@192.168.10.11:/root命令,将两个文件传输至linux服务器/root目录下
远程传输命令
scp(secure copy)是一个基于SSH协议在网络之间进行安全传输的命令,与cp命令不同的是,scp不仅能够通过网络传送数据,而且所有的数据都将进行加密处理。
其格式为:
scp
[参数] 本地文件 远程账户@远程IP地址:远程目录
scp
[参数] 远程账户@远程IP地址:远程文件 本地目录
-r:用于传送文件夹
-P:指定远程主机的sshd端口号
scp ./one.txt
root@192.168.197.130:/root/
①使用grep命令找出one文件中包含the字符的行
grep -n 'the' one.txt
②使用grep+正则找出one文件中t[a-z]e的行
grep -n 't[a-z]e' one.txt
③使用grep+正则找出one文件中The开头的行
grep -n '^The' one.txt
④使用grep+正则找出two文件中g开头d结尾且包含3个连续字母o的行
grep -n 'g.*oo.*d' two.txt
3:good
4:goood
5:gooood
6:goooood
7:gooooood
⑤使用grep+正则找出two文件中包含至少2个连续字母o的行
grep -n 'ooo*' two.txt
3:good
4:goood
5:gooood
6:goooood
7:gooooood
任务3:利用管道符,找出dmesg命令所输出内容中包含ens32的行,并显示行号。//找出ps
-aux命令所输出内容中包含ssh的行,并显示行号。
3、使用管道符,完成实验内容
找出dmesg命令所输出内容中包含ens33的行,并显示行号
dmesg | grep -n 'ens32'
1859:[6.738664] IPv6: ADDRCONF(NETDEV_UP): ens32: link is not ready
1860:[6.740851] IPv6: ADDRCONF(NETDEV_UP): ens32: link is not ready
找出ps -aux命令所输出内容中包含ssh的行,并显示行号
ps -aux | grep -n 'ssh'
238:root 1417 0.0 0.2 105996 4108 ? Ss 10:18 0:00 /usr/sbin/sshd -D