一鍵獲取shell腳本
1. shell腳本,獲取目錄的結構,保存到文件
使用遞歸的shell腳本沒有find效率高。find 是為目錄搜索而優化過的程序。
#!/bin/bash
DIR="$1"
if [ -z "$2"] ;then
echo "must set 2st argument for output file ." >& 2
exit 1
fi
OUT="$2"
DIR=$(readlink -m "$DIR")
#轉換成絕對路徑
find "$DIR" -type "d" >"$OUT"
#搜索目錄保存到輸出文件。
2. linux腳本如何一鍵授權並執行
在當前路徑下輸入r chmod 777 腳本名r 給腳本授權,r 然後就可以執行腳本r ./腳本名 r r 777 是最高許可權,有讀、寫、執行許可權;和屬組用戶和其他用戶的讀、寫、執行許可權。r 其他許可權分別是r -rw------- (600) -- 只有讀寫許可權。r -rw-r--r-- (644) -- 只有有讀寫許可權;而屬組用戶和其他用戶只有讀許可權。r -rwx------ (700) -- 只有有讀、寫、執行許可權。r -rwxr-xr-x (755) -- 有讀、寫、執行許可權;而屬組用戶和其他用戶只有讀、執行許可權。r -rwx--x--x (711) -- 有讀、寫、執行許可權;而屬組用戶和其他用戶只有執行許可權。
Linux中執行shell腳本的4種方法總結,即在Linux中運行shell腳本的4種方法:
方法一:切換到shell腳本所在的目錄(此時,稱為工作目錄)執行shell腳本
方法二:以絕對路徑的方式去執行bash shell腳本
方法三:直接使用bash 或sh 來執行bash shell腳本
方法四:在當前的shell環境中執行bash shell腳本
3. shell腳本獲取參數&在線執行shell腳本
本文介紹以下升攜伏2個知識點,為後後續在工作過程中安裝一吵攜鍵安裝腳本打好基礎:
如下shell腳本中傳入的參隱鏈數依次值如下:
如腳本 getopts.sh
執行 ./getopts.sh -a dd -b ,列印如下結果
如腳本 for.sh
有時候shell腳本可以放在http頁面上,不用download,可以直接執行。
https://www.cnblogs.com/klb561/p/8933992.html
https://www.cnblogs.com/faberbeta/archive/2004/01/13/13559686.html
4. 如何從shell腳本獲取一個結果
將一條命令的執行結果取得命令執行結果的值有:
1、使用反引號`` (數字鍵1左邊的鍵,tab鍵上面,英文方式輸入)如:a=`echo "hello world"`;即將命令 echo "hello world"的輸出賦給變數a
2、可以使用 $(()),如:a=$(echo "hello world"),即將命令echo "hello world"的輸出賦給變數a。
5. 如何獲取傳入給shell腳本的最後一個參數
執行「nano test.sh」創建一個新的shell腳本。
腳本test.sh的內容如下:
#!/bin/sh
name=$1
echo "the ${name} are great man!"
給新創建的test.sh的腳本賦可執行許可權,命令為「chmod 755 test.sh」。
執行'./test.sh "xiao wang"'命令,可以看到自己編寫腳本的結果「the xiao wang are great man!」。
5
"name=$1"中$1為系統提供的位置參數,$0代表程序的名稱,[$1/$2/...]從1開始為傳遞的參數。
6
linux系統除了提供位置參數還提供內置參數,內置參數如下:
$# ----傳遞給程序的總的參數數目
$? ----上一個代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值。
$* ----傳遞給程序的所有參數組成的字元串。
$n ----表示第幾個參數,$1 表示第一個參數,$2 表示第二個參數 ... $0 ----當前程序的名稱
$@----以"參數1" "參數2" ... 形式保存所有參數
$$ ----本程序的(進程ID號)PID
$! ----上一個命令的PID
6. 達夢資料庫shell腳本怎麼獲取查詢語句結果集
方式一
當然是windows電腦安裝達夢管理工具,直接把腳本貼進去執行,但避免不了出現誤操作
在這里插入圖片描述
方式二
使用shell腳本執行sql
1. 先找到達夢資料庫安裝位置吧
[root@localhost ~]# ss -nlp |grep 5236
tcp LISTEN 0 128 [::]:5236 [::]:* users:(("dmserver",pid=103380,fd=4))
[root@localhost ~]# ps -ef|grep dmserver
root 85093 66993 0 17:56 pts/6 00:00:00 grep --color=auto dmserver
dmdba 103380 1 8 13:36 ? 00:23:18 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG_JW/dm.ini -noconsole
1
2
3
4
5
1
2
3
4
5
2. 直接在linux上執行shell命令執行sql腳本
2.1 # disql username/password:port
使用這個命令可以進入sql控制台
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
伺服器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 5.524(ms)
disql V8
SQL>
進入SQL>後:
直接輸入sql語句,使用英文分號結尾,回車執行。
使用「`sql文件路徑」,可以執行sql腳本文件,注意前面有一個小撇(esc和tab中間的鍵)
使用「start sql文件路徑」,可以執行sql腳本文件。
2.2 # disql username/password:port `sql文件位置
使用這個命令可以執行sql腳本
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236 \`sql/test.sql
[root@localhost sql]#
1
2
1
2
但需注意
這個腳本執行完sql會停留在sql執行行,如需執行完返回到shell命令行,則需要在sql文件結尾添加:exit; 。
這個shell語句不能用start執行sql文件,只能使用「`」,並且前面需要添加轉義字元「\」。
2.3 達夢sql腳本注意事項
目前發現-創建schema語句以及執行過程結尾,都需要添加「/」結束
例如執行以下語句,回車執行,一直在輸出數字,直到輸入「/」,再回車執行,才執行成功。
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
伺服器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 6.121(ms)
disql V8
SQL> create schema test;
2
3 /
操作已執行
已用時間: 26.698(毫秒). 執行號:700604.
SQL>
sql腳本示例:
-- 創建schema
CREATE SCHEMA DB_ZFBA_MOBILE;
/
-- 執行過程
begin
if exists(select 1 from DBA_TAB_COLUMNS where OWNER='DB_ZFBA_MOBILE' AND TABLE_NAME='T_ZJTQD') then
EXECUTE immediate 'drop table DB_ZFBA_MOBILE.T_ZJTQD';
end if;
end;
/
create table DB_ZFBA_MOBILE.T_ZJTQD
(
"C_BH" char(32) NOT NULL, -- 主鍵
"C_BH_AJ" varchar2(32) NULL, -- 案件編號
……
"DT_ZHXGSJ" datetime NULL, -- 最後修改時間
constraint PK_T_ZJTQD primary key( C_BH )
);
sql文件結尾添加exit;,保證多個sql文件執行不會中斷
3. 編寫shell腳本
注意:shell腳本一定在linux中編寫,windows編寫的有些語句執行不成功(目前原因未知)
例如: a=a b=b c=$a$b echo $c 在windows下編寫,linux中執行完會輸出b
#!/bin/bash
# 請先配置資料庫連接信息,再執行此腳本
DM_PATH=/home/dmdba/dmdbms #達夢資料庫的安裝位置
USERNAME=cpuser #達夢資料庫連接用戶名
PASSWORD=cpuser123 #達夢資料庫連接密碼
PORT=5236 #達夢資料庫連接埠號
# 下面的信息請不要隨意修改
CONNECT_INFO=$USERNAME/$PASSWORD:$PORT
echo "連接信息:"$CONNECT_INFO
# STEP 1
echo "【開始執行】---- sql/02_創建資料庫對象/00.CS_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/00.CS_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/00.CS_GSYS.sql"
# STEP 2
echo "【開始執行】---- sql/02_創建資料庫對象/01.CT_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/01.CT_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/01.CT_GSYS.sql"
# STEP 3
echo "【開始執行】---- sql/02_創建資料庫對象/02.CC_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/02.CC_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/02.CC_GSYS.sql"
# STEP 4
echo "【開始執行】---- sql/02_創建資料庫對象/03.CI_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/03.CI_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/03.CI_GSYS.sql"
# STEP 5
echo "【開始執行】---- sql/03_初始化數據/02.I_T_Aty_CodeType_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化數據/02.I_T_Aty_CodeType_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/03_初始化數據/02.I_T_Aty_CodeType_GSYS.sql"
# STEP 6
echo "【開始執行】---- sql/03_初始化數據/02.I_T_Aty_Code_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化數據/02.I_T_Aty_Code_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/03_初始化數據/02.I_T_Aty_Code_GSYS.sql"
# Complete
echo "【SQL全部執行完成】---- 日誌請查看DB_DM.log"
執行完成後,通過shell控制台和DB_DM.log日誌可以分析sql腳本是否執行成功。