【Shell】shell编程基础,变量,数组,函数

Shell编程基础

Shell脚本规范
Shell基础用法
Shell变量
Shell数组
Shell函数

shell是一个命令解释器,是介于操作系统内核与用户之间一个绝缘层。准确地说,它也是一种强力的计算机语言。shell程序被称为一个脚本,是一种很容易使用的工具,它可以通过将公共程序、工具和编译过的二进制程序粘合在一起来建立应用。

Shell脚本规范

1.创建脚本名称以 .sh 结尾
2.脚本文件首行开头必须写上  #!/bin/bash
3.必须赋予脚本执行权限
[root@linux ~]# chmod +x file.sh

查看Linux系统中的shell
[root@linux ~]# cat /etc/shells


4.Shell脚本执行
./file.sh        #.表示当前位置执行shell   
/root/file.sh    #绝对路径执行shell
bash file.sh     #bash执行shell
source file.sh   #source执行shell  


脚本调试(语法错误)
[root@linux ~]# bash -n file.sh
脚本调试(检查错误)
[root@linux ~]# bash -x file.sh


Shell基础用法

单引号''     完全引用,不能调用变量
双引号""     部分引用,可调用变量
反引号``     执行命令,`free -m | awk '/Mem/{printf("%d\n"),$3/$2*100}'`


# -n不换行
[root@linux ~]# echo -n $UID 
0[root@linux ~]#

# -e开启反斜杠转义,\n换行
[root@linux ~]# echo -e "aaa\nbbb\n"
aaa
bbb

# \t制表符(TAB键)
[root@linux ~]# echo -e "aaa\tbbb\t" 
aaa bbb 

# \r回车键

||逻辑或    前边命令失败执行后边命令
&&逻辑与    前边命令成功运行后边命令
&          一个&是开后台,例如:cat &


整数运算
• 使用$
• echo $((3+5))
• echo $[3+5]
• echo $((((5+3*2)-4)/2))
除时,如果结果有小数,则截取小数部分
• $算式运算符:+-*/()


read 命令交互
[root@linux ~]# read a
123
[root@linux ~]# echo $a
123

[root@linux ~]# read -p "IQ passwd:" pass    
IQ passwd:123
[root@linux ~]# echo $pass
123

passwd命令在输入密码的时候是不显示的。
[root@linux ~]# vim pass.sh
#!/bin/bash
stty -echo                   # 在终端上输入的字符不会显示在屏幕上
read -t 10 -p "IQ passwd:" pass   # -t 超时时间 10s, -p 在读取之前打印一些提示
stty echo
echo                         # 换行
echo $pass | mail -s "haha" root@localhost
[root@zyg ~]# ./pass.sh
IQ passwd:



Shell 显示带颜色字体
\033[字背景颜色;字体颜色m   ANSI控制码   \33[0m 关闭所有属性
字颜色:30—–37                         字背景颜色范围:40—–47
echo -e "\033[30m 黑色字 \033[0m"      echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"      echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"      echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"      echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"      echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"      echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"      echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"      echo -e "\033[47;30m 白底黑字 \033[0m"

报警声音
echo -e "\007 the bell ring"


字符串替换
[root@linux ~]# z=123123123
[root@linux ~]# echo ${z/1/}
23123123
[root@linux ~]# echo ${z//1/}
232323
[root@linux ~]# echo ${z/1/x}
x23123123
[root@linux ~]# echo ${z//1/x}
x23x23x23



掌握参数传递机制Xargs (空格是默认定界符)
可将多行信息以你想要排列显示出来
例如 cat a.txt | xargs -n 3   每一行以三列显示出来
echo “namexnamexname” | xargs -dx 定义x 为分隔点并不显示x        
结果就会  name name name


Shell变量

自定义变量
语法:            A=123
调用变量          echo $A
取消变量          unset A
显示所有变量       set  


环境变量
在配置文件中给应用程序使用需要继承的时候,使用exprot导出,不能称之为全局,程序创建子进程复制父进程的叫全局。
语法:     export A=123
bash 进入子进程,echo $A 就会显示123
env  查看所有环境变量


预定义变量
echo '$0' = $0   #表示当前的进程名
echo '$*' = $*   #表示所有位置参数的内容
echo '$#' = $#   #表示位置参数的数量
echo '$$' = $$   #表示当前进程的进程号
echo '$!' = $!   #表示后台运行的最后一个进程号
echo '$?' = $?   #表示命令执行后返回的状态
[root@linux ~]# ./z.sh z y g
$0 = ./z.sh
$* = z y g
$# = 3
$$ = 5470
$! =
$? = 0


位置变量
[root@linux ~]# ./z.sh 1 2 3 4
$0 = ./z.sh
$* = 1 2 3 4 5 6 
$# = 6
$1 = 1
$2 = 2
$3 = 3

Shell数组

定义数组
myarry=(1 2 3 4 5)
[root@linux ~]# echo ${myarry[2]}
显示结果为3

查看数组中所有的元素
[root@linux ~]# echo ${myarry[*]}
1 2 3 4 5

统计数组中元素的个数
[root@linux ~]# echo ${#myarry[@]}
5

删除数组:
[root@linux ~]# myarry=(1 2 3 4 5)
[root@linux ~]# unset myarry

删除数组[1]:
[root@linux ~]# myarry=(1 2 3 4 5)
[root@linux ~]# unset myarry[1] 

替换:
[root@linux ~]# a=(1 2 3 4 5) 
[root@linux ~]# a=(${a[@]/3/100})
[root@linux ~]# echo ${a[@]} 
1 2 100 4 5

关联数组
存取时,以非序数(数字),这里是字符串
[root@linux ~]# myarry["two"]=2
[root@linux ~]# echo ${myarry[two]}
2

遍历数组
遍历(For循环法)[root@linux ~]# for var in ${myarry[@]} ; do echo $var ;done
1
2
3


Shell函数

语法:
function f_name() 
{ 
	command
}

示例一:将两个参数求和
function test()
{
	n=$[$1+$2]
	echo $n
}
test 1 2

[root@linux ~]# sh fun2.sh 
3

示例二:输出指定网卡的IP地址
function ip()
{
	ifconfig |grep -A1 "$1:" |tail -1 |awk '{print $2}'
}
read -p "Please input the eth name: " e
eth=`ip $e`
echo "$e address is $eth"

[root@linux ~]# sh fun3.sh 
Please input the eth name: ens33
ens33 address is 192.168.233.206



发布了11 篇原创文章 · 获赞 0 · 访问量 115

猜你喜欢

转载自blog.csdn.net/weixin_43658009/article/details/89054036