shell 脚本编码

一,搭建在idea中进行shell开发环境 

   1,按照idea的开发插件 bashsupport .  注意配置默认interpreter , 还有修改 虚拟机默认编码,否则console端中文输出乱码。

  

二,开发讲解

全部为个人编码练习,包括各种shell 基础编码知识,包括字符串,控制语句。最后用一个 复杂的shell 开发项目讲解结束。

#!/bin/bash

echo '变量'
a='sam'
echo ${a}

echo '字符串'
b=',hello'
echo "${a} gao, ${b}"
echo ${a:1:2}
echo "sam $b see " # \" \"

echo '符号使用'
fdv=`date +%F`
echo \"Today $fdv\"

echo '常用命令使用'
cd ~
touch aa.txt
echo "first line" > aa.txt
touch bb.txt
echo  "first line  xx" > bb.txt
diff aa.txt bb.txt


echo '数组'
arr=('a' 'b'  'c')
echo ${arr[1]}

echo "注释"
<<EOF
SKKKK
注释
参数传递:
  $0 $1 $2
  $@ $*    $# 参数个数
EOF

echo '语句控制块'
c=10
d=20
if [ $c != $d ]  # -nq
then
  echo "a is not equal b"
fi

for var in sam is me  # 1 2 3 4 5
do
    echo "${var}"
done


if [ -f aa.txt -a -f bb.txt ] # ! -o -a
then
  echo "aa is file and bb is file"
fi

echo "函数展示"
add() {
    echo "第一个参数为 $1 "
    echo "第二个参数为 $2 "
    echo "参数总数有 $# 个"
    return $(($1+$2))
}
echo `add 1 2`

echo '文件包含'
cd ~
cat cc.sh
echo "echo 'it is in cc.sh'" > cc.sh
source ./cc.sh

echo '实践练习'
<<EOF
常用命令讲解:
文件目录命令:
ls -a -l 显示文件和目录
cd / .. ~ 进入目录
cp sc tg cp -av 复制整个目录
rm 删除文件 rm -rf 删除整个目录
mv 移动和改名 mv sc tg 改名 -f 覆盖选项
cat 显示文件内容
more 分页显示 比如ps us|more
tail tail -n 100 显示文件尾部
vi 编辑文件
vim 同上
touch 创建空白文件
基本系统命令:
who 当前用户 last 最近登录用户 date 日期 clock uname 系统版本
reboot shutdown halt 系统重启 关闭 停止命令
监视: top 查看cpu 内存资源 free 查看内存和分区
ps 进程查看 kill
df 查看磁盘
用户和组:
su 切换用户
groupadd 添加用户组
useradd 添加用户
passwd
userdel 删除用户 chown 修改所有者 chgrp 改变文件目录的组 chmod 改用户权限
文件压缩和解压: tar 压缩文件
netstat 查看网络状态
ifconfig 查看修改网卡
ping 检查网络连通
ssh 远程登录
scp 安全远程复制
EOF

echo '实践练习'

# 计算多个文件中的所有的行数 ,使用函数来解决。
get_files () {
files="`ls *.[ch]`" # 列出全部的.c .h 文件
}

# 计算文件内的行数
count_lines () {
local f=$1 # 传入文件名
l=`wc -l $f | sed 's/^\([0-9]*\).*$/\1/'` # wc -l 文件行数
}

# 该脚本无参数传入,如果有,报错退出
if [ $# -ge 1 ]
then
echo "Usage: $0 "
exit 1
fi

# 定义行分割符
IFS=$'\012'

echo "$0 counts the lines of code"
# don't forget to initialise!
l=0 # 单个文件行数
n=0 #文件个数
s=0 #文件总行数的汇总
get_files
for f in $files
do
count_lines $f
echo "$f: $l"
n=$[ $n + 1 ]
s=$[ $s + $l ]
done

echo "$n files in total, with $s lines in total"

 

二,业务中的一个shell代码片段;

   业务功能:安装Hadoop 

# Load script configuration file
source $HADOOP_INSTALL_SCRIPTS/INSTALL.config
source $HADOOP_INSTALL_SCRIPTS/bin/functions/hadoop.sh

if [ -e "$HADOOP_INSTALL_ENV" ]
then
    echo "Previous Hadoop installation found."
    exit
fi

if [ ! -e "$HADOOP_INSTALL_SCRIPTS/tmp/slaves" ]
then
    echo "Cluster configuration files not found."
    echo "You must run hadoop-discovery-cluster first."
    exit
fi

echo "Install and configure Hadoop..."
install_start_time=`date +"%s"`
install_hadoop
configure_hadoop
install_stop_time=`date +"%s"`
let install_total_time=$install_stop_time-$install_start_time

 

posted @ 2022-06-09 19:14  gaussen126  阅读(270)  评论(0编辑  收藏  举报