重庆网站网站建设沈阳网站建设模块
web/
2025/10/5 5:58:53/
文章来源:
重庆网站网站建设,沈阳网站建设模块,河北网络科技有限公司,东莞市网站建设分站品牌Shell用户与系统内核之间交流平台Shell类型/bin/sh/bin/bash(系统默认bash)/bin/tcsh/bin/csh/etc/shells 放置当前系统可用shell为什么需要shell编程1.减少繁琐工作的重复进行#xff0c;减少错误2.提高工作效率3.事态的批量化进行Bash特点功能1.查看命令历史(1000条)history…Shell用户与系统内核之间交流平台Shell类型/bin/sh/bin/bash(系统默认bash)/bin/tcsh/bin/csh/etc/shells 放置当前系统可用shell为什么需要shell编程1.减少繁琐工作的重复进行减少错误2.提高工作效率3.事态的批量化进行Bash特点功能1.查看命令历史(1000条)history 查看历史命令history -c 清空历史命令/etc/profile2.别名alias h5head -5unalias h53.管道符重定向ps aux | grep 3306echo passewd | passwd --stdin usernamels list.txtls -l list.txtmail -s test xxbaidu.com list.txtfind / -user yuxiang -type f all 2 error4.命令序列的使用技巧在linux中可以使用控制字符(;,,||,):将程序后台执行firefox 可以用ctrlz将进程后台执行jobs 查看后台任务fg n 将后台任务拿到前台组合多个命令命令间没有任何逻辑关系顺序执行[rootserver ~]# ls /tmp;ls /root;ls /home组合多个命令前一个命令执行成功才能执行后一个make make install[rootserver ~]# ls -lh initial-setup-ks.cfg ls .||:组合多个命令前一个执行失败才会执行后一个[rootserver ~]# id yuxiang /dev/null echo hi,yuxiang || echo No such user5.花括号{}使用技巧通过花括号可以生成命令行或者脚本所需的字串括号中可以包含连续的序列或使用逗号分割多个项目连续的序列需要包括一个起点和一个终点俩者之间用“..”分割[rootserver ~]# mkdir /tmp/dir{1,2,3}[rootserver ~]# mkdir /tmp/{dir4,dir5,dir6}[rootserver ~]# mkdir /tmp/dir{7..9}[rootserver ~]# rm -rf /tmp/dir{1..9}[rootserver ~]# echo user{1,5,9}user1 user5 user9[rootserver ~]# echo {0..10}0 1 2 3 4 5 6 7 8 9 10[rootserver ~]# echo {0..10..2}0 2 4 6 8 10[rootserver ~]# echo {0..10..3}0 3 6 9[rootserver ~]# echo {2..-1}2 1 0 -1[rootserver ~]#变量变量是用来存储非固定值的载体它具有一个值以及零个或多个属性创建变量语法格式name[value]1.变量如果没有指定值(value),变量将被赋值为空字符串2.变量定义后调用《$变量名》来调用变量3.变量的名称为字母数字下划线组成4.但首字母不能为数字号间无空格5.变量名无硬性的大小写要求建议使用大写或首字母大写6.变量的值可修改属性可以通过typeset进行修改NAME鱼老板echo $NAMEtypeset -r NAME #设置变量属性只读 -r7.可以利用declare创建一个空变量暂时不赋值[rootserver ~]# declare NUMBER #预先定义变量NUMBER[rootserver ~]# typeset -i NUMBER #设置NUNBER属性为整数型[rootserver ~]# NUMBERtest #强制赋值给变量[rootserver ~]# echo $NUMBER #打印变量结果为00[rootserver ~]# NUMBER200 #赋值整数成功[rootserver ~]# echo $NUMBER2008.通过read命令设置变量read从标准输入中读取变量值(类似于python中的input)使用-p选项添加相应的提示信息[rootserver ~]# read SAYhello ervery[rootserver ~]# echo $SAYhello ervery[rootserver ~]# read -p plese tail me do you have girl friand: SAYplese tail me do you have girl friand:sorry,I do[rootserver ~]# echo $SAYsorry,I do[rootserver ~]#9.set 查看当前系统中设置的所有变量及值set |grep ...unset #删除变量unset 变量名[rootserver ~]# set | grep SAYSAYsorry,I do[rootserver ~]# unset SAY[rootserver ~]# set | grep SAY_SAY[rootserver ~]#变量的作用范围使用name[value]创建变量默认在当前shell中有效子进程不会继承这样的变量使用export命令将变量放置到环境变量中此时可全局使用export可以直接定义环境变量并赋值也可以先定义一个普通的用户变量然后通export转换为环境变量环境变量Bash为我们预设了很多环境变量实际操作中我们可以直接调用这些变量(Bash手册)SHELL 查看当前系统的默认BashHOSTNAME 查看系统的主机名BASHPID 查看当前Bash进程的进程号UID 查看当前用户的ID号HOME 查看当前用户的家目录PWD 查看当前工作目录PS1 主命令提示符PS2 次命令提示符RANDOM 0-32767之间的随机数PATH 命令搜索路径#path添加PATH路径PATH$PATH:/root #追加注意绝对不能用下列方法PATH/root #此操作代表覆盖位置变量(主要体现在脚本中)位置变量使得脚本中命令可以调用脚本时不同位置的参数参数之间一般用空格隔开$0 代表当前shell程序的文件名称$1 代表shell程序的第一个参数$2 代表shell程序的第二个参数以此类推($1-$9)$# 代表shell程序所有参数的个数$*和$ 都代表所有参数的内容区别是$*将所有参数作为一个整体而$将所有参数作为个体看待$$ 代表当前进程的ID号%? 代表程序的退出代码(0代表执行成功非0代表执行失败)[rootserver ~]# cat weizhi.sh#!/bin/bash#This is test script for parme!echo This is the file name:$0echo This is the first parm:$1echo This sis the second parm:$2echo This is the number of all parm:$#echo This is the all parm:$*echo This is the all parm:$echo This is PID:$$echo This is parm over:$?[rootserver ~]#[rootserver ~]# bash weizhi.sh a_1 b_2 c_3 d_4This is the file name:weizhi.shThis is the first parm:a_1This sis the second parm:b_2This is the number of all parm:4This is the all parm:a_1 b_2 c_3 d_4This is the all parm:a_1 b_2 c_3 d_4This is PID:5224This is parm over:0[rootserver ~]#变量的展开与替换#一下四组用于需要确定变量是否正确设置环境${varname:-work} #当varname存在且不为空则返回varname值否则返回word${varname:word} #当varname存在且不为空,返回varname值否则返回word ##同时对var进行赋值操作${varname:?message} #当varname存在且不为空返回varname值否则显示varname:message${varname:word} #当varname存在且不为空返回word否则返回null[rootlocalhost ~]# NAMEBJTLXY[rootlocalhost ~]# echo $NAMEBJTLXY[rootlocalhost ~]# echo ${NAME:-no user};echo ${NAME}BJTLXYBJTLXY[rootlocalhost ~]# echo ${NAME:dana};echo ${NAME}BJTLXYBJTLXY[rootlocalhost ~]# echo ${NAMEs:dana};echo ${NAME}danaBJTLXY[rootlocalhost ~]# echo ${NAME:?shuo sha lie};echo $NAMEBJTLXYBJTLXY[rootlocalhost ~]# echo ${NAMEs:?shuo sha lie};echo $NAMEdanaBJTLXY[rootlocalhost ~]# echo ${NAMES:?shuo sha lie};echo $NAME-bash: NAMES: shuo sha lie[rootlocalhost ~]# echo ${NAMEses:huanglaoban};echo $NAMEBJTLXY[rootlocalhost ~]# echo ${NAME:huanglaoban};echo $NAMEhuanglaobanBJTLXY[rootlocalhost ~]##下面六组主要用于需要对变量的值做修改后输出的场景${varname#key} #从头开始删除关键字(key)执行最短匹配${varname##key} #从头开始删除关键字执行最长匹配${varname%key} #从尾部开始删除关键字执行最短匹配${varname% %key} #从尾部开始删除关键字执行最长匹配${varname/old/new} #将old替换为new替换第一个出现的old${varname//old/new} #将old替换为new替换所有[rootlocalhost ~]# USR$(head -1 /etc/passwd)[rootlocalhost ~]# echo $USRroot:x:0:0:root:/root:/bin/bash[rootlocalhost ~]# echo ${USR#*:}x:0:0:root:/root:/bin/bash[rootlocalhost ~]# echo $USRroot:x:0:0:root:/root:/bin/bash[rootlocalhost ~]# echo ${USR##*:}/bin/bash[rootlocalhost ~]# echo ${USR%:*}root:x:0:0:root:/root[rootlocalhost ~]# echo ${USR%%:*}root[rootlocalhost ~]# echo ${USR/root/admin}admin:x:0:0:root:/root:/bin/bash[rootlocalhost ~]# echo ${USR//root//admin}/admin:x:0:0:/admin://admin:/bin/bash[rootlocalhost ~]#数组一组具有相同数据类型的集合数据类型数值类型字符串类型bash提供一维数组的变量功能数组中所有便利那个都会被编录成索引数组的索引从0开始创建数组1.name[subscript]value2.name(value1………………valuen) #用空格隔开3.declare -a 定义一个空数组获取数组的值可以使用echo ${name[subscript]} 通过索引得到数组的值如果subscript是或者*则将调用所有的数组成员如果使用${#name[subscript]}可以返回${name[subscript]}长度如果是*或,则返回数组中元素个数[rootlocalhost ~]# A[1]11[rootlocalhost ~]# A[2]22[rootlocalhost ~]# A[3]33[rootlocalhost ~]# echo ${A[0]}[rootlocalhost ~]# echo ${A[1]}11[rootlocalhost ~]# echo ${A[-1]}33[rootlocalhost ~]# A[-1]99-bash: A[-1]: bad array subscript[rootlocalhost ~]# A[6]66[rootlocalhost ~]# echo ${A[*]}11 22 33 66[rootlocalhost ~]# echo ${A[]}11 22 33 66[rootlocalhost ~]# echo ${#name[*]}0[rootlocalhost ~]# echo ${#name[]}0[rootlocalhost ~]# echo ${#A[]}4[rootlocalhost ~]# echo ${#A[1]}2[rootlocalhost ~]# echo ${A[0]},${A[1]},${A[2]},${A[3]},11,22,33[rootlocalhost ~]# A[0]00[rootlocalhost ~]# echo ${A[0]},${A[1]},${A[2]},${A[3]}00,11,22,33[rootlocalhost ~]#[rootlocalhost ~]# B(aa bb cc)[rootlocalhost ~]# echo ${B[0]},${B[1]},${B[2]}aa,bb,cc[rootlocalhost ~]# echo ${B[0]}:${B[1]}:${B[2]}aa:bb:cc[rootlocalhost ~]# echo length if B_0 is ${#B[0]} #请注意此处的错误length if B_0 is ${#B[0]}[rootlocalhost ~]# echo length of B_0 is ${#B[0]}length of B_0 is 2[rootlocalhost ~]# echo length of B_1 is ${#B[1]}length of B_1 is 2[rootlocalhost ~]# echo ${#B[*]}3[rootlocalhost ~]#数值型数组(一对括号表示元素之间空格隔开)arr_num(1 2 3 4 5 6)字符型数组arr_string(aa bb cc dd )数组常用操作获取数组的长度arr_length${#arr_num[*]}arr_length${#arr_string[]}列出索引下标echo ${!arr_num[]}读取某个下标的值arr_index_2${arr_num[2]}对某个下标进行赋值下标存在相当与修改原有的值arr_num[2]100下标不存在按照升序走arr_num[23]100删除操作清除某个元素unset arr_num[1]清除整个数组unset arr_num数组的切片格式${数组名[/*]:开始下标取数数值}echo ${arr_string[*]:2:3}数组的遍历for v in ${arr_string[]};doecho $v;done
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87197.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!