shell基础知识
shell种类:sh【linux】 如 bash、csh【unix】
不同的操作系统使用不同的shell,同一个kernel上可以使用不同的shell
1、查看使用shell:echo $SHELL
2、shell环境定义:
临时环境变量——仅当前环境有效
将临时变量永久生效——将环境变量定义写入到配置文件中
【/etc/profile 针对系统所有用户生效】
【$HOME/.bash_profile 特定用户生效】
系统预定义的环境变量 如:echo $PWD /$HOME /$PATH
3、shell脚本编程:
创建shell脚本
i 首行:表示脚本将要调用的shell解释器,内容如:#!/bin/bash
ii 注释:#开头的行(首行除外),如:#my first shell script
iii 内容:可执行内容和shell结构
shell脚本的权限
一般情况下,默认创建的脚本是没有执行权限的。
赋予可执行权限:chmod +x first.sh
shell脚本的执行
i 输入脚本的绝对路径或相对路径
【/root/helloWorld.sh】 【./helloWorld.sh】
ii bash或sh + 脚本
【sh helloWorld.sh】
iii 在脚本的路径前加 . 或source
【source /root/helloWorld.sh】 【../helloWorld.sh】
4、shell变量:
变量设置规则:
a. 变量名称可以用字母、数字、下划线组成,但不能以数字开头,环境变量名建议大写,便于区分;
b. 在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型;
c. 变量用等号连接值,等号左右两端不能有空格;
d. 变量的值如果有空格,需使用单引号或双引号括起来。
变量分类:
用户自定义变量、环境变量、位置参数变量和预定义变量。
可以通过set查看系统中存在的所有变量。
a. 用户自定义变量:由字母或下划线开头,由字母、数字或下划线序列组成,且大小写字母意义不同,变量名长度设有限制;
b. 系统变量:保存和操作环境相关的数据,如$HOME,$SHELL,$USER等;
c. 位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定;
d. Bash中已经定义好的变量。
变量设置:习惯用大写字母命名变量,变量名以字母表示的字符开头,不能用数字。
变量调用:使用时在变量名前加上"$",echo查看变量值,如echo $A。
变量赋值:定义时赋值——变量=值(等号两端不能有空格)
命令结果赋给变量——如 aa=$((4+5))
变量赋给另一个变量——如 A=$STR
单引号和双引号的区别:
现象:单引号的内容全部输出,双引号里的内容会有变化
原因:单引号会将所有特殊字符脱意
删除变量:
unset NAME
注:用户自定义的变量,作用仅在当前的shell环境
read命令
read [选项] 值
read -p(提示语句) -n(字符个数) -t(等待时间) -s(隐藏输入)
如:read -t 30 -p "please input your name:" name
echo $name
运算符:
格式:expr m+n 或 $((m+n))
expr运算符之间要有空格
5、条件判断:
内置test命令——测试范围:整数、字符串、文件
常用操作符号 [ ]表示,表达式写在 [ ]中
[ expression ] 或 test expression
expression首尾部都有空格
字符串测试:
test str1==str2
test str1!=str2
test str1 是否不为空
test -n str1 是否不为空
test -z str1 是否为空
注:可加 || 、&&
整数测试:
test int1 -eq int2 是否相等
test int1 -ge int2 [>=、-gt>、-le<=、-lt<]
文件测试:
test -d file 指定文件是否目录
[-e] 是否存在
[-f] 是否常规文件 如:【-f /etc/services】
[-L]文件存在并且是一个符号链接
test -r file 指定文件是否可读
-w 是否可写
-x 是否可执行
多重条件测试
条件1 -a 条件2 逻辑与 都成立为真
条件1 -o 条件2 逻辑或 一个成立即为真
!条件 逻辑非 取反
6、流程控制语句
if/else语句
单分支if条件语句:
if [条件判断式]
then
程序块
fi
或者:
if [条件判断表达式];
then
程序块
fi
多分支if条件语句
if [条件判断式1]
then
程序1
elif [条件判断式2]
then
程序2
……
else
程序n
fi
case命令——多分支得if/else命令,以esac作为终止符
格式:
CMD = $1
case $CMD in
start)
echo "starting"
;;
stop)
echo "stopping"
;;
*)
echo "usage:{start/stop}"
esac
for循环
for ((条件))
do
程序
done
while循环
while 表达式
do
command
……
done
自定义函数
格式:
函数名()
{
命令1……
命令2……
return 返回值变量
}
[function] funname[0]
{
action;
return int;
}
function start() 或 function start
【注:shell函数必须先定义再调用。使用return value获取函数得返回值。函数在当前shell中执行可以使用脚本中得变量。】
脚本调试
sh -x script 执行该脚本并显示所有变量的值
set -x 对部分脚本进行调试
sh -n script 不执行脚本只检查语法模式,并返回语法错误
sh -v script 执行并显示脚本内容
7、awk和sed
cut 【选项】 文件名 默认分隔符是制片符
-f 列号 提取第几列
-d 分隔符 按照指定分隔符分割列
cut的局限性:不能分割空格
<1>awk 一个强大的文本分析工具
把文件逐行读入,以空格为默认分隔符将每行切开,切开的部分再进行各种分析处理。
语法:awk '条件1 {动作1} 条件2 {动作2}……' 文件名
FS内置变量——可指定分隔符
如:cat 文件名 awk ‘BEGIN{FS=":"}’
<2>sed stream editor 非交互性文本交流编辑器
编辑文件或标准输入导出的文本拷贝。
并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
语法: sed [选项] ‘[动作]’ 文件名
常用选项: -n 显示经过sed特殊处理的数据
-e 允许多点编辑
-i 直接修改读取的档案内容,而不是由屏幕输出。
8、定时器
<1>crontab 命令格式
作用:用于生成cron进程所需的crontab文件
crontab -e 使用编辑器编辑当前的crontab文件
<2>crontab 文件格式
minute hour day-of-month month-of-year day-of-week commands
书写注意事项:
a、全部不能为空,不知道的值用通配符*来表示任意时间
b、每个时间字段可以指定多个值,不连续的值用逗号,隔开,连续的值用-隔开
c、命令应该给出绝对路径
d、用户必须具有对应的权限
可以用crontab运行多个任务:
crontab -e 多个任务;
9、bash常用命令
history历史命令、命令别名、输入输出重定向、管道符、命令连接符、命令替换符、通配符。
本文详细介绍了Shell的基础知识,包括各种shell的种类及其应用,如何查看和设置环境变量,以及如何创建和执行shell脚本。此外,还讲解了变量的定义、赋值、删除以及单引号和双引号的区别。文章进一步阐述了条件判断、流程控制语句(如if/else和case)以及循环结构(for和while)。同时,提到了awk和sed这两个强大的文本处理工具。最后,讨论了Linux系统的定时任务管理crontab以及一些常用的Bash命令。通过这些内容,读者可以掌握Shell脚本编程和Linux系统管理的基本技能。
1077

被折叠的 条评论
为什么被折叠?



