shell 是一种脚本语言
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell命令解析器:
系统提供 shell命令解析器: sh bash tcsh
查看自己 Linux 系统的默认解析:echo $SHELL
脚本的调用形式shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行
打开终端时系统自动调用:/etc/profile 和 ~/.bashrc
/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置
开机自启动的程序,一般也在这里设置
~/.bashrc
Shell 语法初始用户自己的家目录中的 .bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量
#!/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=rootsource环境变量
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 命令将小写字母替换为大写字母
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)