linux修改某个用户的数组,linux-shell编程1:变量和数组

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/profile

2.别名

alias h5='head -5'

unalias h5

3.管道符重定向

ps aux | grep '3306'

echo "passewd" | passwd --stdin username

ls > list.txt

ls -l >> list.txt

mail -s test xx@baidu.com < list.txt

find / -user yuxiang -type f > all 2> error

4.命令序列的使用技巧

在linux中,可以使用控制字符(;,&&,||,&)

&:将程序后台执行

firefox & 可以用ctrl+z将进程后台执行

jobs 查看后台任务

fg n 将后台任务拿到前台

;:组合多个命令,命令间没有任何逻辑关系,顺序执行

[root@server ~]# ls /tmp;ls /root;ls /home

&&:组合多个命令,前一个命令执行成功才能执行后一个

make && make install

[root@server ~]# ls -lh initial-setup-ks.cfg && ls .

||:组合多个命令,前一个执行失败,才会执行后一个

[root@server ~]# id yuxiang &> /dev/null && echo "hi,yuxiang" || echo "No such user"

5.花括号{}使用技巧

通过花括号可以生成命令行或者脚本所需的字串

括号中可以包含连续的序列或使用逗号分割多个项目

连续的序列需要包括一个起点和一个终点,俩者之间用“..”分割

[root@server ~]# mkdir /tmp/dir{1,2,3}

[root@server ~]# mkdir /tmp/{dir4,dir5,dir6}

[root@server ~]# mkdir /tmp/dir{7..9}

[root@server ~]# rm -rf /tmp/dir{1..9}

[root@server ~]# echo user{1,5,9}

user1 user5 user9

[root@server ~]# echo {0..10}

0 1 2 3 4 5 6 7 8 9 10

[root@server ~]# echo {0..10..2}

0 2 4 6 8 10

[root@server ~]# echo {0..10..3}

0 3 6 9

[root@server ~]# echo {2..-1}

2 1 0 -1

[root@server ~]#

变量

变量是用来存储非固定值的载体,它具有一个值,以及零个或多个属性

创建变量语法格式:

name=[value]

1.变量如果没有指定值(value),变量将被赋值为空字符串

2.变量定义后调用《$变量名》来调用变量

3.变量的名称为字母,数字,下划线组成

4.但首字母不能为数字,=号间无空格

5.变量名无硬性的大小写要求,建议使用大写或首字母大写

6.变量的值可修改,属性可以通过typeset进行修改

NAME="鱼老板"

echo $NAME

typeset -r NAME #设置变量属性只读 -r

7.可以利用declare创建一个空变量,暂时不赋值

[root@server ~]# declare NUMBER #预先定义变量NUMBER

[root@server ~]# typeset -i NUMBER #设置NUNBER属性为整数型

[root@server ~]# NUMBER=test #强制赋值给变量

[root@server ~]# echo $NUMBER #打印变量结果为0

0

[root@server ~]# NUMBER=200 #赋值整数成功

[root@server ~]# echo $NUMBER

200

8.通过read命令设置变量

read从标准输入中读取变量值(类似于python中的input)

使用-p选项添加相应的提示信息

[root@server ~]# read SAY

hello ervery

[root@server ~]# echo $SAY

hello ervery

[root@server ~]# read -p "plese tail me do you have girl friand:" SAY

plese tail me do you have girl friand:sorry,I do

[root@server ~]# echo $SAY

sorry,I do

[root@server ~]#

9.set 查看当前系统中设置的所有变量及值:set |grep ...

unset #删除变量

unset 变量名

[root@server ~]# set | grep SAY

SAY='sorry,I do'

[root@server ~]# unset SAY

[root@server ~]# set | grep SAY

_=SAY

[root@server ~]#

变量的作用范围

使用name=[value]创建变量,默认在当前shell中有效,子进程不会继承这样的变量

使用export命令将变量放置到环境变量中,此时可全局使用

export可以直接定义环境变量并赋值

也可以先定义一个普通的用户变量,然后通export转换为环境变量

环境变量

Bash为我们预设了很多环境变量,实际操作中我们可以直接调用这些变量(Bash手册)

SHELL 查看当前系统的默认Bash

HOSTNAME 查看系统的主机名

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代表执行失败)

[root@server ~]# cat weizhi.sh

#!/bin/bash

#This is test script for parme!

echo "This is the file name:$0"

echo "This is the first parm:$1"

echo "This sis the second parm:$2"

echo "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:$?"

[root@server ~]#

[root@server ~]# bash weizhi.sh a_1 b_2 c_3 d_4

This is the file name:weizhi.sh

This is the first parm:a_1

This sis the second parm:b_2

This is the number of all parm:4

This is the all parm:a_1 b_2 c_3 d_4

This is the all parm:a_1 b_2 c_3 d_4

This is PID:5224

This is parm over:0

[root@server ~]#

变量的展开与替换

#一下四组用于需要确定变量是否正确设置环境

${varname:-work} #当varname存在且不为空,则返回varname值,否则返回word

${varname:=word} #当varname存在且不为空,返回varname值,否则返回word ##同时对var进行赋值操作

${varname:?message} #当varname存在且不为空,返回varname值,否则显示varname:message

${varname:+word} #当varname存在且不为空,返回word,否则返回null

[root@localhost ~]# NAME=BJTLXY

[root@localhost ~]# echo $NAME

BJTLXY

[root@localhost ~]# echo ${NAME:-no user};echo ${NAME}

BJTLXY

BJTLXY

[root@localhost ~]# echo ${NAME:=dana};echo ${NAME}

BJTLXY

BJTLXY

[root@localhost ~]# echo ${NAMEs:=dana};echo ${NAME}

dana

BJTLXY

[root@localhost ~]# echo ${NAME:?shuo sha lie};echo $NAME

BJTLXY

BJTLXY

[root@localhost ~]# echo ${NAMEs:?shuo sha lie};echo $NAME

dana

BJTLXY

[root@localhost ~]# echo ${NAMES:?shuo sha lie};echo $NAME

-bash: NAMES: shuo sha lie

[root@localhost ~]# echo ${NAMEses:+huanglaoban};echo $NAME

BJTLXY

[root@localhost ~]# echo ${NAME:+huanglaoban};echo $NAME

huanglaoban

BJTLXY

[root@localhost ~]#

#下面六组主要用于需要对变量的值做修改后输出的场景

${varname#key} #从头开始删除关键字(key),执行最短匹配

${varname##key} #从头开始删除关键字,执行最长匹配

${varname%key} #从尾部开始删除关键字,执行最短匹配

${varname% %key} #从尾部开始删除关键字,执行最长匹配

${varname/old/new} #将old替换为new,替换第一个出现的old

${varname//old/new} #将old替换为new,替换所有

[root@localhost ~]# USR=$(head -1 /etc/passwd)

[root@localhost ~]# echo $USR

root:x:0:0:root:/root:/bin/bash

[root@localhost ~]# echo ${USR#*:}

x:0:0:root:/root:/bin/bash

[root@localhost ~]# echo $USR

root:x:0:0:root:/root:/bin/bash

[root@localhost ~]# echo ${USR##*:}

/bin/bash

[root@localhost ~]# echo ${USR%:*}

root:x:0:0:root:/root

[root@localhost ~]# echo ${USR%%:*}

root

[root@localhost ~]# echo ${USR/root/admin}

admin:x:0:0:root:/root:/bin/bash

[root@localhost ~]# echo ${USR//root//admin}

/admin:x:0:0:/admin://admin:/bin/bash

[root@localhost ~]#

数组

一组具有相同数据类型的集合

数据类型:

数值类型:

字符串类型:

bash提供一维数组的变量功能,数组中所有便利那个都会被编录成索引,数组的索引从0开始

创建数组:

1.name[subscript]=value

2.name=(value1………………valuen) #用空格隔开

3.declare -a 定义一个空数组

获取数组的值

可以使用echo ${name[subscript]} 通过索引得到数组的值

如果subscript是@或者*,则将调用所有的数组成员

如果使用${#name[subscript]}可以返回${name[subscript]}长度

如果是*或@,则返回数组中元素个数

[root@localhost ~]# A[1]=11

[root@localhost ~]# A[2]=22

[root@localhost ~]# A[3]=33

[root@localhost ~]# echo ${A[0]}

[root@localhost ~]# echo ${A[1]}

11

[root@localhost ~]# echo ${A[-1]}

33

[root@localhost ~]# A[-1]=99

-bash: A[-1]: bad array subscript

[root@localhost ~]# A[6]=66

[root@localhost ~]# echo ${A[*]}

11 22 33 66

[root@localhost ~]# echo ${A[@]}

11 22 33 66

[root@localhost ~]# echo ${#name[*]}

0

[root@localhost ~]# echo ${#name[@]}

0

[root@localhost ~]# echo ${#A[@]}

4

[root@localhost ~]# echo ${#A[1]}

2

[root@localhost ~]# echo ${A[0]},${A[1]},${A[2]},${A[3]}

,11,22,33

[root@localhost ~]# A[0]=00

[root@localhost ~]# echo ${A[0]},${A[1]},${A[2]},${A[3]}

00,11,22,33

[root@localhost ~]#

[root@localhost ~]# B=(aa bb cc)

[root@localhost ~]# echo ${B[0]},${B[1]},${B[2]}

aa,bb,cc

[root@localhost ~]# echo ${B[0]}:${B[1]}:${B[2]}

aa:bb:cc

[root@localhost ~]# echo 'length if B_0 is ${#B[0]}' #请注意此处的错误

length if B_0 is ${#B[0]}

[root@localhost ~]# echo 'length of B_0 is' ${#B[0]}

length of B_0 is 2

[root@localhost ~]# echo 'length of B_1 is' ${#B[1]}

length of B_1 is 2

[root@localhost ~]# echo ${#B[*]}

3

[root@localhost ~]#

数值型数组:(一对括号表示,元素之间空格隔开)

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[@]};do

echo $v;

done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

erlang OTP中的四大behaviour fsm的例子

下面是一个fsm的例子&#xff0c;代码如下&#xff1a; 1 -module(code_lock2).2 3 -behaviour(gen_fsm).4 -export([start_link/1]).5 -export([button/1]).6 -export([init/1, locked/2, open/2]).7 -export([code_change/4, handle_event/3, handle_info/3, handle_sync_eve…

node python复用代码_python-代码复用(函数、lambda、递归、PyInstaller库)

一、函数1、函数定义def 函数名(参数列表)&#xff1a;2、返回值 return返回值可以有多个&#xff0c;其实是返回一个tuple##多个返回值def sumDiff(x,y):return xy,x-yn1,n2 eval(input(输入两个数&#xff1a;))s,d sumDiff(n1,n2)print(和为{}&#xff0c;差为{}.format(…

关于linux内核的有关叙述中,下列关于嵌入式Linux系统内核的叙述正确的是()。

听力原文&#xff1a; A $150 million project to replace all of the vertical suspension cables on the 100-year-old Manhattan Bridge will cause occasional weekend disruptions in subway service and require closings of the bikeway and some traffic lanes for par…

WebStorm 预览时把浏览器地址localhost 改成IP

最近在使用WebStorm时&#xff0c;预览网页时地址总是显示的 http://localhost:63342/... &#xff0c;如果要调试其它设备感觉很不方法&#xff0c;此时肯定首先想到的亲爱的度娘&#xff0c;但是貌似没有真正很解决问题的&#xff08;可能是我搜索方法不对&#xff09;。最后…

通用即插即用监视器驱动下载_电脑设备驱动程序有问题,教你3招,快速修复...

驱动程序允许你的设备与Windows 10进行通信。计算机必须安装最新版本的驱动程序才能正常运行。设备驱动程序是一种特殊的软件程序&#xff0c;它控制连接到计算机的特定硬件设备&#xff0c;设备驱动程序对于计算机促进系统与所有已安装程序或应用程序之间的通信至关重要&#…

python在线投票系统讲解_在线投票系统功能分析

网上投票系统的功能一、功能概述(1)客户模块客户模块主要是添加投票项目信息&#xff0c;比如投票项目的题目&#xff0c;选项以及系统配置的要求。(2)新闻模块新闻模块主要是一些关于本系统的新闻信息&#xff0c;其中包括新闻显示和添加删除模块。(3)留言薄模块留言薄模块主要…

linux内存管理的主要概念是虚拟内存,你知道linux内存管理基础及方法?

描述一、基本概念(1)物理内存和虚拟内存物理内存&#xff1a;系统硬件提供的真实物理内存虚拟内存&#xff1a;利用磁盘空间虚拟出的一块逻辑内存&#xff0c;用作虚拟内存的磁盘空间被称为swap&#xff0c;swap类似于windows的虚拟内存。1、linux的内存管理采取的分页存取机制…

R plot图片背景设置为透明_R语言入门第十二讲:基础绘图(二)------plot与par函数(1)...

上一次给大家简单展示了plot函数的用法&#xff0c;以及par函数的使用。今天我们继续应用这两个函数&#xff0c;看看它的其他功能。下面这个图是数据的一部分[1]。我一直认为&#xff0c;作图简单&#xff0c;但关键是要知道数据在数据库中的格式&#xff0c;才能更好的应用到…

qqkey获取原理_【逆向】QQkey盗号木马原理分析

一、简介QQkey是一段字符串&#xff0c;通过这段字符串在没有QQ登录密码的前提下你依然能够在浏览器中对别人QQ空间、邮箱等应用进行随意访问和操作。现在市面上已经有很多使用易语言编写的盗号木马&#xff0c;专门盗取别人的QQkey&#xff0c;通过QQkey改绑关联了该邮箱的Ste…

visual studio 2015 搭建python开发环境,python入门到精通[三]

在上一篇博客Windows搭建python开发环境&#xff0c;python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo&#xff0c;这里略带一句&#xff0c;其实就"学习python"而言&#xff0c;比较建议使用pycharm&#xff0c;pychar…

linux 用脚本建分区,脚本创建磁盘分区

首先最好添加一个空白的磁盘&#xff0c;以免对原数据产生破坏&#xff0c;若果不想添加磁盘也可以&#xff0c;用一个里面数据无关紧要的磁盘&#xff0c;当然前提是必须要对该磁盘内已有的分区进行清空&#xff0c;方法后面第三步会有1.先看脚本内容&#xff1a;[rootlocalho…

如何给打印机墨盒加墨

今天打印东西突然遇到问题了&#xff0c;显示墨盒黑色没墨了&#xff0c;网上一搜&#xff0c;整套的墨盒大几十&#xff0c;随手换了一个关键词 墨盒墨水 这下不到十块钱解决&#xff0c;正好锻炼下自己的动手能力&#xff08;其实就是穷嘛。。。&#xff09; 接下来就分享下动…

三轴加速度传感器和六轴惯性传感器_六轴传感器和三轴传感器的区别

六轴传感器和三轴传感器的区别重力重力传感器就是利用了其内部的由于加速度造成的晶体变形这个特性。由于这个变形会产生电压&#xff0c;只要计算出产生电压和所施加的加速度之间的关系&#xff0c;就可以将加速度转化成电压输出。当然&#xff0c;还有很多其它方法来制作加速…

全局莫兰指数_空间自相关 | 莫兰指数

空间自相关&#xff1a;是指一些变量在同一个分布区内的观测数据之间潜在的相互依赖性。其中&#xff0c;自相关中的“自”表示当你进行相关性观察统计量&#xff0c;是来源于不同对象的同一属性。Tobler(1970)曾指出“地理学第一定律&#xff1a;任何东西与别的东西之间都是相…

宏函数和函数的区别

转载自&#xff1a; http://www.ccidnet.com/2010/0709/2110463.shtml 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型. 2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值…

linux vi 排序命令,10 个你必须掌握的超酷 VI 命令技巧

摘要&#xff1a;大部分Linux开发者对vi命相当熟悉&#xff0c;可是遗憾的是&#xff0c;大部分开发者都只能掌握一些最常用的Linux vi命令&#xff0c;下面介绍的10个vi命令虽然很多不为人知&#xff0c;但是在实际应用中又能让你大大提高效率。在使用vi 编辑器时—无论是初次…

python微信机器人部署服务器_玩法收藏/云服务器/零基础微信机器人实践( Python )...

最近想做个微信机器人&#xff0c;主要是为了个人方便。在腾云阁发现这个教程&#xff0c;得到了一些启发。(修改转载已取得腾讯云授权)技术路径和实现思路首先编程语言使用了 Python &#xff0c; Python 语法简洁、第三方扩展丰富&#xff0c;也因为这里采用的微信消息框架 i…

arduino 水位传感器_云南可信赖的威卡压力传感器哪里有

云南可信赖的威卡压力传感器哪里有 k52gh264云南可信赖的威卡压力传感器哪里有 在生产生活中&#xff0c;对压力表的正确使用为工业生产提供了一定程度的便利。.指针转动受阻在检修过程中&#xff0c;先给弹賛管式压力表施加压力&#xff0c;如果发现被检测表的指针成比例变快或…

小甲鱼Python笔记(下)

二十八 二十九 文件 打开文件 open(文件名[,模式][,缓冲])  注意open是个函数不是方法 模式&#xff1a; 缓冲&#xff1a; 大于1的数字代表缓冲区的大小&#xff08;单位是字节&#xff09;&#xff0c;-1&#xff08;或者是任何负数&#xff09;代表使用默认缓冲区大小 只…

linux内核编译后 make: 警告:检测到时钟错误.,系统时钟 make: 警告:检测到时钟错误。您的创建可能是不完整的。...

修改Linux的时间修改Linux时间一般涉及到3个命令&#xff1a; date&#xff0c; clock&#xff0c; hwclockdate&#xff1a; 修改系统当前的时间&#xff1a;[root]#date –s ‘2005/12/5 10:01:00系统当前的时间改成2005年12月5日&#xff0c;10点01分这个修改在系统重启后就…