Error[8]: Undefined offset: 20, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

Shell 基础 Shell 概述

shell 是一种脚本语言

脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)

shell命令解析器:

系统提供 shell命令解析器: sh bash tcsh

查看自己 Linux 系统的默认解析:echo $SHELL

shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

脚本的调用形式

打开终端时系统自动调用:/etc/profile 和 ~/.bashrc

/etc/profile

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置

开机自启动的程序,一般也在这里设置

~/.bashrc

用户自己的家目录中的 .bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量

Shell 语法初始
#!/bin/bash				### 声明
echo 'wangj'
定义变量
#!/bin/bash
num=10				### 定义变量  [ 普通变量 ]		普通变量只在当前shell中生效
export num=10		### 定义变量  [ 环境变量 ]		
echo $num			### 引用变量

unset num			### 清除变量值
echo $num			### echo 输出
read
#!/bin/bash
num=10				### 定义变量  [ 普通变量 ]
echo "num=$num"		### 引用变量
echo "请输入num的值"	 ### 输出信息
read num			### 键盘输入信息赋予至num
echo "num=$num"		### 输出 read 读取的信息
read 参数
#!/bin/bash
num=10							### 定义变量
echo "num=$num"					### 引用变量
read -p "请输入num的值:" num		 ### 键盘输入信息赋值至num [ -p 参数 显示输入信息 ]
echo "num=$num"					### 输出 read 读取的信息
read 多个值
#!/bin/bash
num=10													# 定义变量
echo "num=$num"											# 引用变量
read -p "请输入num的值:" num		 						 # 键盘输入信息赋值至num [ -p 参数 显示输入信息 ]
echo "num=$num"											# 输出 read 读取的信息
read -p "请连续输入data1 data2的数值:" data1 data2	      # 键盘输入信息赋值至 data1 data2
echo "data1=$data1"										# 输出 read 读取的值
echo "data2=$data2"										# 输出 read 读取的值
只读变量
#!/bin/bash
readonly num=10					# 定义 只读变量
echo "num=$num"					# 引用 只读变量
num=200							# 重新定义 只读变量	[ 会报错 ]
echo "num=$num"					# 第三行报错 因此输出失败
查看变量
[root@localhost ~]# set					# 查看所有变量 [ 包含普通变量 ]

[root@localhost ~]# env					# 查看所有环境变量
XDG_SESSION_ID=129
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.25.1 51883 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/1
USER=root
source环境变量
vim test.sh						# 编写脚本
#!/bin/bash
export DATA=500					# 定义变量 [ 当然也可以直接将该命令写入.bashrc ]

source test.sh					# source 脚本	[ 临时生效 ]

将 source test.sh 写入 .bashrc	  # [ 永久生效 ]

env | grep DATA					# 查看
DATA=500

echo $DATA						# 输出

### 变量生效后 在其他脚本中引用变量
#!/bin/bash
echo "DATA=$DATA"
注意事项
  • 变量名只能包含英文字母下划线,不能以数字开头

  • 等号两边不能直接接空格符 [ 若变量中本身就包含了空格,则整个字符串都要用双引号或单引号括起来 ]

  • 单引号 双引号的区别 [ 双引号:可以解析变量的值 单引号:不能解析变量的值 ]

定义路径变量
export WANGJ_HOME=/home/wangj		# 定义

env | grep WANGJ_HOME				# 查看

echo $WANGJ_HOME					# 输出

cd $WANGJ_HOME						# 引用
追加路径至PATH变量
echo $PATH														# 输出 PATH变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin		

vim ~/.bashrc
export PATH=$PATH:/home/wangj									# 追加一个路径至PATH变量 

source ~/.bashrc												# source

echo $PATH														# 输出
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/wangj
特殊变量

输出终端的 PID

echo $$

案例

vim /test.sh

#!/bin/bash
echo "参数个数=$#"
echo "参数内容=$*"
echo "第一个参数:"
echo "第二个参数:"
echo "第三个参数:"
echo "脚本名:
[root@localhost /]# ./test.sh 10 20 30
参数个数=3
参数内容=10 20 30
第一个参数:10
第二个参数:20
第三个参数:30
脚本名:./test.sh
进程号:6766
" echo "进程号:$$"

运行结果

""(双引号): 包含的变量会被解析
''(单引号): 包含的变量会被当成字符串解析
``(反引号): 反引号中的内容作为系统命令 并执行其内容
 (转义字符): 同C语言 n t r a 等  echo 命令需要加 -e 转义
脚本变量的特殊用法
vim ~/test.sh
echo "Today is `date`"				# 反引号

sh ~/test.sh
Today is Thu Nov 25 19:55:57 CST 2021

反引号

vim ~/test.sh
echo -e "####n####"				# -e 转义    n 换行

sh ~/test.sh
####
####

转义字符

ls: 列出目录下的清单
cat: 连接显示文件内容
head: 显示文件头部,可指定行数,默认显示10行
tail: 显示文件尾部,可指定行数,默认显示10行
file: 显示文件类型
wc: 查看文件或统计信息
find: 查找文件或目录

touch:创建新文件(可以直接使用vim/vi/gredit等编辑器直接创建)
mkdir:创建目录,可以利用 -r选项递归创建
cp: 拷贝命令,拷贝目录时可以使用 -r 选项
ln: 创建链接命令,分为软连接和硬链接
mv: 移动文件或者目录的命令,同时也是改名命令
rm: 删除命令,-r 删除目录, 谨慎使用

ls -l: 可以列出文件和目录的权限信息;
chmod: 修改文件和目录的权限(需要了解字母及数字权限表示)
chown/chgrp: 改变属组和属主
setuid/setgid:设置用户或组权限位

hostname: 查看主机名
who: 列出系统登录的用户
uptime: 查看系统运行时间
uname: 查看系统信息
date: 显示和设置系统日期和时间
id: 显示用户属性
基础命令
paster: 合并文本
dd: 备份和拷贝文件(和vim 和剪切命令一样)
tar: 打包和解包文件
mount, umount : 挂载和卸载存储介质
df: 报告文件系统磁盘空间利用率
du: 评估文件空间利用率
ps: 查看系统的进程
pidof: 列出进程的pid
top: 相当于 Linux 的任务管理器
&: 将作业后台运行
jobs: 查看作业
bg: 让挂起的进程在后台继续执行
fg: 将后台进程放入前台
fdisk: 查看系统的磁盘信息
进阶命令
sort : 文本排序
uniq : 文本去重
tr : 替换命令
diff: 文件对比,找出文件差异
文本处理
history | awk '{print }' | sort | uniq -c | sort -nr | head | tr a-z A-Z
     43 VIM
     32 LS
     19 CD
     18 SYSTEMCTL
     18 SH
     13 GIT
     12 YUM
     12 ECHO
     11 HISTORY
     10 SOURCE

实例

[+++]

含义

history 列出当前用户历史使用命令,awk 过滤出第二列,sort 排序出所有相同命令,uniq -c 去重并统计出每个命令出现的次数,然后再 sort -nr -n参数的意思是按照数字的大小进行排序 -r 则是反向的意思,即正序变为逆序,然后 head 取其前十,最后用 tr 命令将小写字母替换为大写字母

条件执行)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Shell 基础_随笔_内存溢出

Shell 基础

Shell 基础,第1张

Shell 基础 Shell 概述

shell 是一种脚本语言

脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)

shell命令解析器:

系统提供 shell命令解析器: sh bash tcsh

查看自己 Linux 系统的默认解析:echo $SHELL

shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

脚本的调用形式

打开终端时系统自动调用:/etc/profile 和 ~/.bashrc

/etc/profile

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置

开机自启动的程序,一般也在这里设置

~/.bashrc

用户自己的家目录中的 .bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量

Shell 语法初始
#!/bin/bash				### 声明
echo 'wangj'
定义变量
#!/bin/bash
num=10				### 定义变量  [ 普通变量 ]		普通变量只在当前shell中生效
export num=10		### 定义变量  [ 环境变量 ]		
echo $num			### 引用变量

unset num			### 清除变量值
echo $num			### echo 输出
read
#!/bin/bash
num=10				### 定义变量  [ 普通变量 ]
echo "num=$num"		### 引用变量
echo "请输入num的值"	 ### 输出信息
read num			### 键盘输入信息赋予至num
echo "num=$num"		### 输出 read 读取的信息
read 参数
#!/bin/bash
num=10							### 定义变量
echo "num=$num"					### 引用变量
read -p "请输入num的值:" num		 ### 键盘输入信息赋值至num [ -p 参数 显示输入信息 ]
echo "num=$num"					### 输出 read 读取的信息
read 多个值
#!/bin/bash
num=10													# 定义变量
echo "num=$num"											# 引用变量
read -p "请输入num的值:" num		 						 # 键盘输入信息赋值至num [ -p 参数 显示输入信息 ]
echo "num=$num"											# 输出 read 读取的信息
read -p "请连续输入data1 data2的数值:" data1 data2	      # 键盘输入信息赋值至 data1 data2
echo "data1=$data1"										# 输出 read 读取的值
echo "data2=$data2"										# 输出 read 读取的值
只读变量
#!/bin/bash
readonly num=10					# 定义 只读变量
echo "num=$num"					# 引用 只读变量
num=200							# 重新定义 只读变量	[ 会报错 ]
echo "num=$num"					# 第三行报错 因此输出失败
查看变量
[root@localhost ~]# set					# 查看所有变量 [ 包含普通变量 ]

[root@localhost ~]# env					# 查看所有环境变量
XDG_SESSION_ID=129
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.25.1 51883 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/1
USER=root
source环境变量
vim test.sh						# 编写脚本
#!/bin/bash
export DATA=500					# 定义变量 [ 当然也可以直接将该命令写入.bashrc ]

source test.sh					# source 脚本	[ 临时生效 ]

将 source test.sh 写入 .bashrc	  # [ 永久生效 ]

env | grep DATA					# 查看
DATA=500

echo $DATA						# 输出

### 变量生效后 在其他脚本中引用变量
#!/bin/bash
echo "DATA=$DATA"
注意事项
  • 变量名只能包含英文字母下划线,不能以数字开头

  • 等号两边不能直接接空格符 [ 若变量中本身就包含了空格,则整个字符串都要用双引号或单引号括起来 ]

  • 单引号 双引号的区别 [ 双引号:可以解析变量的值 单引号:不能解析变量的值 ]

定义路径变量
export WANGJ_HOME=/home/wangj		# 定义

env | grep WANGJ_HOME				# 查看

echo $WANGJ_HOME					# 输出

cd $WANGJ_HOME						# 引用
追加路径至PATH变量
echo $PATH														# 输出 PATH变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin		

vim ~/.bashrc
export PATH=$PATH:/home/wangj									# 追加一个路径至PATH变量 

source ~/.bashrc												# source

echo $PATH														# 输出
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/wangj
特殊变量

输出终端的 PID

echo $$

案例

vim /test.sh

#!/bin/bash
echo "参数个数=$#"
echo "参数内容=$*"
echo "第一个参数:"
echo "第二个参数:"
echo "第三个参数:"
echo "脚本名:
[root@localhost /]# ./test.sh 10 20 30
参数个数=3
参数内容=10 20 30
第一个参数:10
第二个参数:20
第三个参数:30
脚本名:./test.sh
进程号:6766
" echo "进程号:$$"

运行结果

""(双引号): 包含的变量会被解析
''(单引号): 包含的变量会被当成字符串解析
``(反引号): 反引号中的内容作为系统命令 并执行其内容
 (转义字符): 同C语言 n t r a 等  echo 命令需要加 -e 转义
脚本变量的特殊用法
vim ~/test.sh
echo "Today is `date`"				# 反引号

sh ~/test.sh
Today is Thu Nov 25 19:55:57 CST 2021

反引号

vim ~/test.sh
echo -e "####n####"				# -e 转义    n 换行

sh ~/test.sh
####
####

转义字符

ls: 列出目录下的清单
cat: 连接显示文件内容
head: 显示文件头部,可指定行数,默认显示10行
tail: 显示文件尾部,可指定行数,默认显示10行
file: 显示文件类型
wc: 查看文件或统计信息
find: 查找文件或目录

touch:创建新文件(可以直接使用vim/vi/gredit等编辑器直接创建)
mkdir:创建目录,可以利用 -r选项递归创建
cp: 拷贝命令,拷贝目录时可以使用 -r 选项
ln: 创建链接命令,分为软连接和硬链接
mv: 移动文件或者目录的命令,同时也是改名命令
rm: 删除命令,-r 删除目录, 谨慎使用

ls -l: 可以列出文件和目录的权限信息;
chmod: 修改文件和目录的权限(需要了解字母及数字权限表示)
chown/chgrp: 改变属组和属主
setuid/setgid:设置用户或组权限位

hostname: 查看主机名
who: 列出系统登录的用户
uptime: 查看系统运行时间
uname: 查看系统信息
date: 显示和设置系统日期和时间
id: 显示用户属性
基础命令
paster: 合并文本
dd: 备份和拷贝文件(和vim 和剪切命令一样)
tar: 打包和解包文件
mount, umount : 挂载和卸载存储介质
df: 报告文件系统磁盘空间利用率
du: 评估文件空间利用率
ps: 查看系统的进程
pidof: 列出进程的pid
top: 相当于 Linux 的任务管理器
&: 将作业后台运行
jobs: 查看作业
bg: 让挂起的进程在后台继续执行
fg: 将后台进程放入前台
fdisk: 查看系统的磁盘信息
进阶命令
sort : 文本排序
uniq : 文本去重
tr : 替换命令
diff: 文件对比,找出文件差异
文本处理
history | awk '{print }' | sort | uniq -c | sort -nr | head | tr a-z A-Z
     43 VIM
     32 LS
     19 CD
     18 SYSTEMCTL
     18 SH
     13 GIT
     12 YUM
     12 ECHO
     11 HISTORY
     10 SOURCE

实例

含义

history 列出当前用户历史使用命令,awk 过滤出第二列,sort 排序出所有相同命令,uniq -c 去重并统计出每个命令出现的次数,然后再 sort -nr -n参数的意思是按照数字的大小进行排序 -r 则是反向的意思,即正序变为逆序,然后 head 取其前十,最后用 tr 命令将小写字母替换为大写字母

条件执行

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5610573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存