一、变量的取用echo
可以使用echo这个指令来取用变量,但是,在变量被取用时,前面必须加上$
二、设定与修改变量
myname = canghong
echo $myname
设定的规则如下:
(1)变量与变量内容以一个[=]来连接
(2)等号两边不能直接接空格符
(3)变量名只能是英文字母与数字,但是开头字符不能是数字
(4)变量内若有空格符可食用双引号[“]或单引号[‘]将变量内容结合起来,但
-双引号内的特殊字符如$等,可以保有原本的特性
[var=“lang is $LANG”]则[echo $var] 可得[lang is en_US]
-单引号内的特殊字符则仅为一般字符(纯文本)
[var=“lang is $LANG”]则[echo $var] 可得[lang is $LANG]
(5)可以使用跳脱字符[\]将特殊符号如 [Enter], $,\,空格符等变成一般字符
(6)在一串指令中,还需要藉由其他指令提供的信息,可以使用反单引号[`指令`]或[$(指令)]。注意反单引号是1左边的按键。
[version=$(uname -r)]则[echo $version]可得[2.6.18-123.el5]
(7)若该变量为扩增变量内容时,则可用”$变量名称”或”$(变量)”累加内容
[PATH=“$PATH”:/home/bin]
(8)若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量
[export PATH]
(9)通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断
(10)取消变量的方法为使用unset:[unset 变量名称]例如取消myname的设定:
[unset myname]
三、查看变量
[env]/[export] 列出目前的shell环境下的所有环境变量与其内容
[set] 用set观察所有变量(含环境变量与自定义变量)
四、变量键盘读取、数组与宣告:read ,array , declare
(1)read [-pt] variable
选项与参数:
-p : 后面可以接提示符
-t : 后面可以接等待的[秒数]
例:
read atest #让用户由键盘输入内容,该内容变成atest的变量
echo $test #输出atest变量的内容
#提示用户30秒内输入姓名,该内容变成named的变量
read -p “Please keying your name:” -t 30 named
echo $named #输出named变量的内容
(2)declare/typset
declare [-aixr] variable
-a:将后面名为variable的变量定义称为数组(array)类型
-i:将后面名为variable的变量定义称为整数类型(integer)类型
-x:用法与export一样,就是将后面的variable变成环境变量
-r:将变量设定称为readonly类型,该变量不可被更改内容,也不能unset
例:
declare -i sum=100+300+50 #让变量累加
echo $sum #输出sum
declare -x sum #将sum变成环境变量
declare -r sum #将sum变成只读属性
declare +x sum #将sum变成非环境变量的自定义变量
declare -p sum #-p可以单独列出变量的类型
五、数组array变量类型
#设定var[1]~var[3]的变数
var[1]="small min”
var[2]="big min”
var[3]="nice min”
echo “${var[1]},${var[2]},${var[3]}"
六、变量的测试与内容替换
username=${username-root} #测试一下是否存在username这个变量,若不存在则给予username内容为root
username=${username:-root} #若username未设定或为空字符串,则将username内容设定为root
七、bash的环境配置文件
login shell会读取以下两个文件
- /etc/profile : 这是系统整体的设定,最好不要修改这个档案
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile : 属于使用者个人设定
non-login shell这种非登入情况下读取以下文件
- ~/.bashrc
八、正规表示法的特殊字符
[:alnum:] 代表英文大小写字符及数字,即0-9、A-Z、a-z
[:alpha:] 代表任何英文大小写字符,即A-Z、a-z
[:blank:] 代表空格键与[Tab]按键两者
[:cntrl:] 代表键盘上面的控制按键,即包括CR、LF、Tab、Del..等等
[:digit:] 代表数字,即0-9
[:graph:] 除了空格符外的其他所有按键
[:lower:] 代表小写字符,即a-z
[:print:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号(punctuation symbol
[:upper:] 代表大写字符,即A-Z
[:space:] 任何会产生空白的字符,包括空格键,[Tab],CR 等等
[:xdigit:] 代表16进位的数字类型,因此包括:0-9, A-F, a-f 的数字与字符
延伸正规表示法
[+] 意义:重复[一个或一个以上]的前一个RE字符
[?] 意义:[零个或一个]的前一个RE字符
[|] 意义:[用或(or)的方式找出数个字符串]
[()] 意义: 找出[群组]字符串
[()+] 意义: 多个重复群组的判别
九、条件判断
if [ 条件判断式 ]; then
#档条件判断式成立时,可以进行的指令工作内容
fi #将if反过来写,就表示if结束
十、循环
(1)
while [condition]
do #循环的开始
#程序段落
done #循环的结束
(2)
until [condition]
do
#程序段落
done
(3) for var in con1 con2 con3 ….
do
#程序段落
done
(4)
for (( 初始值;限制值;执行步阶 ))
do
#程序段
done
十一、切换身份
su
若要完整的切换到新使用者的环境,必须要使用[su - username] 或[su -l username],才会连同PATH/USER/MAIL等变量都转换成新用户的环境
如果仅想要执行一次root的指令,可以利用[su —-c ‘指令串’] 的方式处理
使用root切换成为任何使用者时,并不需要输入新用户密码
sudo
sudo -u sshd touch /tmp/mysshd #以sshd的身份在/tmp底下建立一个名为mysshd的档案
/etc/sudoers 是有设定语法的,如果要修改,可以使用visudo
***、实例
(1)创建一个script,该script执行时,可以显示(1)目前的身份 (2)目前所在的目录
#!/bin/bash
echo -e "Your name is ====> $(whoami)"
echo -e "The current directory is ====>$(pwd)”
(2)让用户输入一个数字,程序可以由1+2+3+…..一直累加到用户输入的数字为止
#!/bin/bash
read -p "Please input an integer number:" number
i=0
s=0
while [ "$i" != "$number" ]
do
i=$(($i+1))
s=$(($s+$i))
done
echo "the result of '1+2+3+...$number' is ===> $s “
(3)创建5个账号myquota1,myquota2.....myquota3,这五个用户的密码都是password,且这5个账号所属的初始群组为myquotagrp。
#!/bin/bash
groupadd myquotagrp
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
useradd -g myquotagrp $username
echo "password" | passwd --stdin $username
done